2010-12-22 18 views
0

我們遇到了一些情況,即我們的應用程序在執行某些週期性操作時正在泄漏內存。內存僅在某些機器中泄漏

測試場景由兩個相對複雜的WPF窗口中的一系列進程組成。

關於這種情況的奇怪之處在於,內存只在某些機器上泄漏,而其他硬件完全相同的其他內存可以工作很長時間(每分鐘重複此過程),其內存幾乎不變(一次GC擺脫使用過的內存等)。

這是.NET + WPF。任何有關從哪裏開始尋找的想法?什麼會導致只有一些機器泄漏? (我們正在談論一個30機器測試場景)。

我幾乎沒有WPF的經驗,圖形卡能和它有什麼關係嗎?

+1

無論相同的硬件。每臺機器是否都安裝了完全相同的DLL /庫。你能追查到哪個組件/等等。實際上是在泄漏嗎? – Doon 2010-12-22 16:39:33

+0

這些機器是否運行相同版本的操作系統和.NET? – 2010-12-22 16:41:29

回答

0

我想我們已經找到了答案......我們仍在測試,但它似乎應用程序不再泄漏內存。

http://support.microsoft.com/kb/967634

內存泄漏發生在渲染 線程WPF應用程序時,你 執行下列操作之一:

您可以使用軟件渲染 管道來渲染3D場景 包含一個VisualBrush對象或一個 DrawingBrush對象。例如,當您執行以下操作之一執行 之一時, 正在使用軟件渲染 管道:您使用RenderTargetBitmap 類渲染場景 。

您打印場景。您將 呈現層屬性設置爲0.您通過遠程桌面 連接呈現場景 。

您可以通過 使用不使用Windows 顯示驅動程序模型(WDDM)一 計算機上的WriteableBitmap的類渲染場景。您使用 硬件渲染管道到 通過使用平鋪渲染場景 VisualBrush對象或平鋪 在 不使用WDDM的計算機上的DrawingBrush對象。

1

我會從一個分析器開始,看看熱點在哪裏,以及您在這個週期性操作中看到什麼樣的內存使用模式。很難說出什麼會導致這樣的問題,但請記住,GC不是確定性的,因此可能會陷入這種奇怪的情況。

編輯:同意OP對我在那裏發表的評論。我猜想我所面對的是,即使使用相同的硬件和軟件,系統仍然存在一定程度的不確定性。

1

我使用Ant Profiler來檢查我的應用程序是否有內存泄漏,還有很多其他應用程序用於測試,但您應該考慮使用它並確保沒有泄漏的東西,而且它的巧合是少數機器正在顯示結果。

2

這裏有一些簡單的你可以嘗試。下載SysInternals Process Explorer,運行您的應用程序,然後轉到進程屬性中的性能選項卡。在那裏您將看到有關不同句柄的實時統計信息:GDI句柄,用戶句柄,...現在隨着時間觀察這些句柄是否增長。