.net 使用MEF&;从Windows WCF服务跟踪泄漏内存;第三方组件

.net 使用MEF&;从Windows WCF服务跟踪泄漏内存;第三方组件,.net,wcf,c#-4.0,memory-leaks,mef,.net,Wcf,C# 4.0,Memory Leaks,Mef,我有以下情况: WCF Windows服务1 当有工作要完成时调用WCF服务2 用结果更新数据库 WCF Windows服务2 使用托管可扩展性框架(MEF)在新应用程序域中动态组合部件(插件) 该插件随后创建了一个Watin(开源.net测试框架)实例,该实例又创建了一个新的IE进程,进行了一些WWW导航,进行了一些屏幕抓取,拍摄了一张屏幕截图 所有的东西都返回给打电话的人 我看到WCF Windows服务2中的内存逐渐泄漏,必须每隔几天重新启动一次。使用perfmon在我的开发环境中

我有以下情况:

WCF Windows服务1

  • 当有工作要完成时调用WCF服务2
  • 用结果更新数据库
WCF Windows服务2

  • 使用托管可扩展性框架(MEF)在新应用程序域中动态组合部件(插件)

  • 该插件随后创建了一个Watin(开源.net测试框架)实例,该实例又创建了一个新的IE进程,进行了一些WWW导航,进行了一些屏幕抓取,拍摄了一张屏幕截图

  • 所有的东西都返回给打电话的人

我看到WCF Windows服务2中的内存逐渐泄漏,必须每隔几天重新启动一次。使用perfmon在我的开发环境中(单独)分析了服务之后,我似乎看不到内存泄漏。我曾尝试使用.Net内存分析器,但似乎也没有得到任何结论。IDispose已实现并正在调用

我开始认为这是两个WCF Windows服务之间的交互可能会保留对象引用并阻止IDispose被调用。还有谁见过这种行为吗?还是我找错树了


在别人提到之前。。。我知道正在做的事情是疯狂的…

在跟踪托管内存泄漏时,我很幸运地使用了SciTech的内存探查器(payware)以及WinDbg+PssCor2。我一直在使用.net内存探查器,但老实说,我对结果感到有点困惑。具有正增量计数的类型主要是与WCF相关的字符串或奇数安全类型对象。有对象字节数组,可能是正在传回的屏幕截图。。。这让我开始了大型对象堆的讨论,讨论了它们没有被压缩的事实……但我认为这是在转移注意力。当然,垃圾收集器会在内存耗尽之前收集可用内存(从第2代-LOH所在的位置),并获得OutOfMemoryException?我怀疑可能是非托管内存导致了问题…只是在努力证明它。。。即使使用perfmon并跟踪所有堆中的私有字节和#字节!。。。似乎在问题所在的实时环境中存在差异,并试图在开发人员上重现它…arg您可以证明本机内存泄漏与托管内存泄漏:使用PerfMon并查看
#提交的总字节数
#保留的总字节数
(来自.NET CLR内存)并将它们与
私有字节
虚拟字节
(来自进程组)进行比较。如果只有托管计数器随时间增加,则存在仅托管泄漏。如果两组计数器都随时间增加,则这是本机泄漏。