卸载appdomain不清除C ++ COM对象静态成员

时间:2016-01-23 19:03:20

标签: c# c++ com appdomain

我正在使用第三方C ++ COM对象,它们似乎拥有一些静态成员。问题是我每次开始新的运行时都必须重置静态成员。因此,我目前需要关闭并打开我的应用程序。我尝试使用AppDomain卸载那些静态成员的整个内存,但我不知道为什么它不会工作。我使用Activator.CreateInstance(Type.GetTypeByCLSID)来运行COM对象是否需要手动处理这些实例?请注意,我检查过并且任何静态C#对象都以这种方式处理。

1 个答案:

答案 0 :(得分:2)

非托管资源称为非托管,因为它们的内存不是由托管垃圾回收器处理的。

必须手动处理任何非托管资源。这是IDisposable的目标之一(如果不是最重要的):它的实现具有一些相关的非托管资源。例如,需要手动处理FileStream,因为它是Win32 API调用的包装。

总之,卸载AppDomain或任何其他方法对此没有帮助。您需要编码以便在您不再需要它们时处理这些COM静态资源(即关闭应用程序时)。