【问题标题】:unmanaged dll, hangs / waiting / slow非托管 dll,挂起/等待/慢
【发布时间】:2011-11-25 12:30:28
【问题描述】:

我有一个在 IIS 7 上运行的 asp.net 中工作的非托管 dll。大多数情况下,在几次请求之后,应用程序会挂起大约一分钟,然后再继续或显示错误。 我是否必须处置、释放或调用不同的 DLL?

[DllImport("Fan.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int GET_CALCULATION_FAN_ALONE_PC(ref string input, string buffer);

任何帮助将不胜感激!

【问题讨论】:

标签: asp.net dll unmanaged


【解决方案1】:

似乎未管理的代码不是线程安全的。以下是关于您遇到的问题的一个很好的讨论:

http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/504cdc70-16f1-4c39-a0c0-1d47b2a64f7b/的回答

需要注意的是,非托管代码可能不是线程安全的。在 Web 服务的上下文中,每个请求将到达不同的线程,并且非托管代码可能无法处理。这些崩溃可能是未在多线程环境中测试过的代码导致内存损坏的迹象。

您可能希望从托管代码调用的非托管代码存在几个不同的线程问题:

1。 同时在多个线程上调用非托管代码可能不安全。这个问题可以通过正确的锁定来解决。我强调正确。 2. 非托管代码可能以某种方式依赖于始终在同一个线程上调用。这不太可能,但可能。这不能直接在 ASP.NET Web 应用程序或 Web 服务应用程序中解决,除非您在应用程序启动时以某种方式启动一个线程,并将对该代码的所有请求编组到该线程。 3. 非托管代码可能是 COM 代码并且依赖于在特定单元中运行。不知道有没有办法解决。

这个问题不会有一个通用的解决方案,至少不是你能解决的。通用解决方案是非托管代码的开发人员或供应商使他们的代码可以安全地从多个线程上的托管代码中调用。在他们在那个环境中彻底测试他们的代码之前,你不能确定它会起作用。

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2010-10-14
    • 2017-10-16
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多