2013-06-18 63 views
-4

我使用的應用程序使用了PDFViewer component 和大的PDF(> 85Kb,這可能會影響到LOH),並且我在集成後遇到了應用程序中的內存泄漏問題。C#pdfviewer memoryleak

除其他外,我認爲LOH碎片和GC弱引用。它有沒有效果:

GC.Collect(); 
GC.WaitForFullGCComplete(); 
GC.Collect(); 
GC.WaitForFullGCComplete(); 

儘管它應該收集代2.

堆到我檢測到的剖析,性能監視器和探險的過程,在每個迭代(創建新的PDF查看器)/(刪除舊的PDFViewer),我們增加了頁面文件,虛擬內存和工作集。 LOH的大小並不增加,但第2代堆大小正在增加。

我沒有機會吸引外部援助,因爲我的應用程序很硬很大,但現在我在PDFViewer應用程序中檢測到同樣的問題,您可以在上面的鏈接下載。當我積極調整窗口大小時,會增加內存。並且當我打開其他pdf或重新打開當前pdf時,儘管打開pdf處理舊pdf的內存並不收集:

_pdfDoc.Dispose(); 
_pdfDoc = null; 
GC.Collect() 

也沒有效果。

CLR拉住我的腿,爲了找到理由,我整理了一下腦袋。

+0

下一次請格式化更敏感.. –

+0

而問題是..? –

+0

你可以下載並看到在這個應用程序memoryleak? –

回答

0

通過行_pdfDoc.Dispose();不保證該行被調用。如果在此行之前有任何錯誤或返回聲明。處置不被調用。將_pdfDoc放入using(...){ ... }構造中可以減少損失的變化。

你的管理方式不夠可靠。您可以更好地使用內存分析器來查看長時間運行後的內存中有哪些對象。

0

如果它是一個查看器應用程序,它應該將PDF命令轉換爲光柵representation.Most可能使用Image類作爲畫布。當你談論主動調整大小和內存使用率增加時,我想到了不處理的位圖或其他GDI資源。看看這個代碼。

+0

我也這麼認爲,但是我通過Bear和GDInspector檢查了關於GDI資源泄漏的PDFViewer應用程序,它沒有GDI泄漏。 –