|
|
1
1
使用性能计数器。在最容易使用的开发/测试中
如果您需要在生产使用中继续这样做,应用程序可以读取性能计数器本身(使用
对。
是:解决问题。 如果COM组件或C++库真的泄漏,那么那些确实需要修复(如果以前只用于短时间进程,泄漏可能已经存在很长时间了)。 您可能正在使用本机堆与.NET托管堆和GC进行交互。当存在内存压力时,托管GC将运行(即,否则需要为进程获取更多内存以完成分配)。如果托管包装器没有分配内存(或者没有太多内存),那么它就没有理由运行GC。当您从.NET引用COM组件时,引用被保存在本机包装类型中,当GC收集COM实例时,此包装将释放该实例(通过释放最后计数的COM引用)。 因此,如果GC不运行,则不会释放COM组件。只需COM实例使用大量内存,整个进程内存提交就可以开始增长。 有三种方法(降低偏好):
#3是最简单的方法,可以在运行几个小时(例如在计时器上)并查看内存使用性能计数器后强制完全GC来确认这种方法。如果是这种情况,则继续执行1或2。 (这基本上是在我的第一个.NET项目中发生的事情,大量非托管堆的交互无法被由于缺少托管内存压力而未收集的托管实例释放。在这种情况下,修复方法是向键COM组件添加一个额外的方法,以释放它所持有的对象。) |
|
Saravanan Sachi TheSharpieOne · 在VB中调用Excel函数的任何方法。NET作为Microsoft。办公室互操作。Excel在服务器中抛出未注册的类(REGB\u E\u CLASSNOTREG)? 8 年前 |
|
|
IS4 · 无参考的封送[in]参考 8 年前 |
|
|
Water Cooler v2 · 如何在Java中进行COM互操作? 8 年前 |
|
|
Aurora · C#到VB6互操作:索引数组属性不能跨嵌套COM接口访问 10 年前 |
|
|
Eugen · _bstr_r与_T(“”) 11 年前 |
|
|
Builder · 应用程序退出后留在内存中 11 年前 |