1

我正在構建一個使用非託管C++ dll的.NET Windows服務。 我的服務和C++ dll都使用多線程。 我在處理一段時間(幾小時)後內存不足。 我嘗試使用「的性能計數器」 測量的線程的數目和我監視下列值:當前線程的性能計數器

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

雖然第一個是穩定和它的值是合理的第二和第三都沒有。 他們一直在成長,並達到一個巨大的數字(超過1500)。 他們是平等的!

它們應該相等嗎?我也從this page不瞭解這些計數器是否會計算託管線程和非託管線程。

我懷疑非託管代碼一直在啓動新線程而不是重用它們,但我不確定。

任何人都可以幫忙嗎? 謝謝

+0

是的,聽起來像DLL沒有重用或不處理它的使用線程。 – 2010-01-27 14:08:34

回答

1

聽起來像泄漏。非託管DLL很可能沒有正確處理它的線程。

爲了真正測試這個寫一個單線程的應用程序使用該DLL。監視應用程序。如果你注意到它沒有正確處理事情,那麼你有兩種情況之一。

要麼你沒有調用DLL中的正確方法來關閉資源(線程)。或者DLL編碼嚴重。第一個很容易修復,第二個需要訪問源代碼或原始開發人員。

如果是DLL並且無法聯繫他們或者他們不願意修復,那麼找到其他幾乎完全相同的東西。

+0

太好了,我照你的建議(由它使用的DLL在一個循環單線程應用程序),我仍然看到在這兩個增量: #目前公認的線程 #總的認可線程 的,他們總是相等 什麼這是否意味着? – 2010-02-02 14:14:12

+0

這意味着要麼dll沒有釋放它自己的資源,要麼在dll中有一個函數調用不是你正在創建的。我敢打賭前者。如果它是前者,那麼你需要聯繫建立dll的人,看看是否有更新或找到其他產品做同樣的事情。 – NotMe 2010-02-02 14:48:51