在我的C#应用程序中,我使用的是一个开源库,它加载一个非托管DLL并从中调用一些函数。
var instance = lib.CreateInstance("R.dll")
LoadLibrary
来调用加载DLL的kernel32.dll
instance.init()
调用加载的DLL中的某些函数如果我将代码作为控制台应用运行,它可以正常工作,但是当我将代码集成到 ASP.NET Web应用程序中时,它会在第二次运行期间挂起。据我所知,Web服务器(IIS)使用一个进程来处理许多请求,因此在第二次调用var instance = lib.CreateInstance("R.dll")
时已经加载了DLL。
如何在服务器上运行?有没有办法在每次请求到服务器后卸载DLL?
答案 0 :(得分:0)
为每个请求加载和卸载dll不是一个好主意。你会慢慢减慢你的反应。如果您需要每个请求,只需加载一次。
由于您不控制lib.CreateInstance("R.dll")
的作用,因此您可以将实例保留在单例类中,并仅在尚未加载时使用CreateInstance。
Jon Skeet有nice article on thread safe singletons。