C ++非托管DLL - 实例化和处理问题 - C#

时间:2012-03-02 17:07:06

标签: c# c++ wrapper

我有一个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的某种问题。

0 个答案:

没有答案