我经常使用 ArcObjects,ESRI 的 API 为 ArcGIS 应用程序编程。
我想知道是否有一个工具可以检查哪些 COM 对象是活动的或在堆栈上。
我已经知道要释放它们,但是我会检查每种方法以查看是否有剩余物。
我经常使用 ArcObjects,ESRI 的 API 为 ArcGIS 应用程序编程。
我想知道是否有一个工具可以检查哪些 COM 对象是活动的或在堆栈上。
我已经知道要释放它们,但是我会检查每种方法以查看是否有剩余物。
Randomly typing in "COM Inspector" in Google produced this link. Looks good, no personal experience. Run this query yourself to find others.
据我所知,没有这样的工具。在最低级别,COM 对象只是内存的特定二进制布局。分配内存的方式和位置取决于实现 COM 对象的代码。任何工具都只能检查它共同创建的 COM 对象的内存。实际上,它只能检查同一公寓中的 COM 对象,对于任何其他对象,它只能检查代理。
此外,COM 对象永远不会 [*] 在堆栈上分配;它们总是在堆中分配。
[*] 虽然 ATL 的 CComObjectStack<> 对于单元测试来说非常方便。
如果您使用的是 .NET,则应该循环使用AppDomain.CurrentDomain.GetAssemblies加载的所有程序集。
要查看加载了哪些扩展,请使用 IExtensionManager 循环浏览扩展。
查看加载了哪些命令栏有点复杂。