从重新加载的DLL调用函数会挂起应用程序

时间:2013-01-17 10:37:50

标签: c# asp.net iis dll

在我的C#应用​​程序中,我使用的是一个开源库,它加载一个非托管DLL并从中调用一些函数。

  1. 首先,我使用var instance = lib.CreateInstance("R.dll")
  2. 中的LoadLibrary来调用加载DLL的kernel32.dll
  3. 然后我调用instance.init()调用加载的DLL中的某些函数
  4. 如果我将代码作为控制台应用运行,它可以正常工作,但是当我将代码集成到 ASP.NET Web应用程序中时,它会在第二次运行期间挂起。据我所知,Web服务器(IIS)使用一个进程来处理许多请求,因此在第二次调用var instance = lib.CreateInstance("R.dll")时已经加载了DLL。

    如何在服务器上运行?有没有办法在每次请求到服务器后卸载DLL?

1 个答案:

答案 0 :(得分:0)

为每个请求加载和卸载dll不是一个好主意。你会慢慢减慢你的反应。如果您需要每个请求,只需加载一次。

由于您不控制lib.CreateInstance("R.dll")的作用,因此您可以将实例保留在单例类中,并仅在尚未加载时使用CreateInstance。

Jon Skeet有nice article on thread safe singletons