【问题标题】:Performance counters for current threads当前线程的性能计数器
【发布时间】:2010-01-27 13:59:22
【问题描述】:

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

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

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

他们应该平等吗?我也不知道this page 这些计数器是否会同时计算托管线程和非托管线程。

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

谁能帮忙? 谢谢

【问题讨论】:

  • 是的,听起来 dll 没有重用或没有处理它使用过的线程。

标签: multithreading memory-management windows-services performancecounter


【解决方案1】:

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

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

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

如果它是 DLL,而您无法联系到他们或者他们不愿意修复,那么请找到其他几乎可以做同样事情的东西。

【讨论】:

  • 太好了,我按照你的建议做了(制作了一个在循环中使用该 DLL 的单线程应用程序),我仍然看到两者都有增量:# of current Recognized threads # of total 识别线程,它们是总是相等是什么意思?
  • 这意味着 dll 没有释放它自己的资源,或者 dll 中有一个您没有进行的函数调用。我会打赌前者。如果是前者,那么您需要联系构建 dll 的人,看看是否有更新或寻找其他产品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
相关资源
最近更新 更多