0

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

  1. 首先我调用var instance = lib.CreateInstance("R.dll")which 加载 DLL 使用LoadLibraryfromkernel32.dll
  2. 然后我调用instance.init()which 从加载的 DLL 中调用一些函数

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

我怎样才能让它在服务器上工作?有没有办法在每次向服务器发出请求后卸载 DLL?

4

1 回答 1

0

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

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

Jon Skeet 有一篇关于线程安全单例的好文章

于 2013-01-17T11:14:46.127 回答