2008-10-23 34 views
4

我有一個運行在大量XPS文檔(數千個)上的WinForms .Net應用程序,在此運行期間,每個文檔的句柄數量(根據sysinternals進程監視器和任務管理器)將增加3-10。我非常懷疑這些是由MS .Net XPS框架庫打開並未關閉的句柄,但我無法追蹤它。如何找到我的.Net應用程序在Windows應用程序中泄漏的位置?

儘管單步執行代碼,在同一次運行過程中,處理計數會在不同點增加。例如,一次循環和句柄計數將在一行上跳1,下次可能不跳,或者它可能跳2。所以我懷疑XPS com組件有句柄泄漏。

雖然內存使用情況良好,但如果我一直用盡這種手柄,那麼我會崩潰的應用程序,也許桌面。

到目前爲止,我已經嘗試sysinternals進程資源管理器來查看句柄,但它們都被標記爲沒有更多的細節。還使用了sysinternals的handle.exe,這並不顯示快照之前,之間和之後的任何顯着不同。

任何關於如何追蹤手柄的線索?我想我將不得不簡化爲單個線程控制檯應用程序來測試。

問候

瑞安

回答

1

可能愚蠢,但你檢查,你的一切處置這是一次性的?

+0

是的,正如我所說的,內存使用現在可以了(在COM XPS調用中泄漏有很多問題),所以我認爲這種配置不是問題。我非常懷疑XPS的東西,但我還不能證明它。 – 2008-10-23 21:03:27

+2

Dispose並不真正處理內存 - 它更多的是釋放非託管資源(句柄)。我不是說它*是*,但它值得檢查。 – 2008-10-24 06:32:06

+0

+1 - 使用FxCop幫助檢測可能無法處理的地方。 – Joe 2008-10-24 06:48:54

1

儘管單數用途有點昂貴,但我們使用ANTS Profiler,這對於找到類似的問題非常有幫助。你可以下載並試用試用版。

這裏也可能有其他好的分析器,但這是我熟悉的。

0

那麼,你忘了從PackageStore中刪除已創建的XPS文檔嗎?那麼用什麼MemoryStreams來支持你的包呢?

0

我已經有很好的經驗,使用YourKit .net profiler來診斷這種故障。強烈推薦 - 它相對便宜,它甚至可以很好地處理C++ - CLI(我嘗試了其他方法,如dottrace from jetbrains,它們被拒絕或者完全崩潰)。

相關問題