1

我正在构建一个使用非托管 C++ dll 的 .NET Windows 服务。我的服务和 c++ dll 都使用多线程。在处理过程中一段时间​​(数小时)后,我的内存不足。我尝试使用“性能计数器”测量线程数,并监控以下值:

# of current logical Threads
# of current recognized threads
# of total recognized Threads

虽然第一个是稳定的,它的价值是合理的,但第二个和第三个却不是。他们一直在增长并达到一个巨大的数字(超过 1500 个)。他们是平等的!!!!

他们应该平等吗?如果这些计数器将同时计算托管线程和非托管线程,我也无法从该页面了解。

我怀疑非托管代码总是启动新线程而不是重用它们,但我不确定。

谁能帮忙?谢谢

4

1 回答 1

1

听起来像泄漏。非托管 DLL 很可能没有正确处理它的线程。

为了真正测试这个,编写一个使用该 DLL 的单线程应用程序。监控应用程序。如果你发现它没有正确处理东西,那么你有两种情况之一。

要么您没有在 DLL 中调用正确的方法来关闭资源(线程)。或者 DLL 编码错误。第一个很容易修复,第二个需要访问源代码或原始开发人员。

如果它是 DLL 并且您无法联系他们或者他们不愿意修复,那么请找到其他几乎相同的东西。

于 2010-01-27T14:10:18.787 回答