我正在构建一个使用非托管C ++ dll的.NET Windows服务。 我的服务和c ++ dll都在使用多线程。 处理完一段时间后,我的内存不足。 我尝试使用“性能计数器”来测量线程数 我监控以下值:
# of current logical Threads
# of current recognized threads
# of total recognized Threads
虽然第一个稳定且价值合理,但第二个和第三个不稳定。 他们总是在成长并达到一个庞大的数字(超过1500)。 他们是平等的!!!!
他们应该平等吗?我也不明白this page这些计数器是否会计算托管和非托管线程。
我怀疑非托管代码总是启动新线程而不是重用它们,但我不确定。
任何人都可以帮忙吗? 感谢
答案 0 :(得分:1)
听起来像是泄漏。很可能非托管DLL没有正确处理它的线程。
为了真正测试这个写一个使用该DLL的单线程应用程序。监控应用程序。如果您发现它没有正确处理,那么您有两种情况之一。
要么您没有在DLL中调用正确的方法来关闭资源(线程)。或者DLL编码错误。第一个很容易修复,第二个需要访问源代码或原始开发人员。
如果它是DLL并且您无法联系他们或者他们不愿意修复,那么找一些其他几乎完全相同的东西。