我有一个C ++非托管DLL,我在C#2.0上通过Web应用程序(IIS6)使用它。为了使用这个DLL,我使用.Net的实用程序tlbimp
创建了一个包装器。
我希望在新用户会话发生的每个时间创建(实例化)该DLL。当用户注销应用程序并关闭浏览器时,将被释放(处置)。
我遇到的问题是,现在当第一个用户连接到应用程序时,正在创建对象,但是当另一个用户登录时,正在重用相同的先前对象,并且当每个用户从系统断开连接时,在重新启动IIS之前,该对象尚未释放。
我知道这种行为,因为该组件(DLL)每次实例化时都会在EventLog上插入一个新的注册表,并且每次都要处理它。在我提到的情况下,在重新启动IIS之前,只有一个创建注册表和非配置注册表,然后是dispose注册表。
这是我为尝试处理对象而实现的代码,但它似乎没有任何效果。
public class ComObject: IDisposable
{
private ComClientClass_objCom;
private bool _isDisposed = false;
public ComObject()
{
_objCom = new ComClientClass();
}
~ComObject()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
//finalize unmanaged resources
_objCom = null;
}
_isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
GC.Collect();
}
}
我不知道这种行为是否与IIS配置有关。
有人可以解释一下,为什么会发生这种情况?因为据我所知这个相同的DLL与旧的ASP一起使用然后它工作正常,所以我认为它是.Net中的GC的某种问题。