卸载应用域不会清除C++ COM 对象静态成员

本文关键字:C++ COM 对象 静态成员 清除 应用 卸载 | 更新日期: 2023-09-27 18:31:32

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

卸载应用域不会清除C++ COM 对象静态成员

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

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

总之,卸载AppDomain或任何其他方法在这里都无济于事。当你不再需要这些 COM 静态资源时(即关闭应用时),你需要编写代码来释放它们。