2013-03-11 48 views
0

我使用螞蟻探查剖析內存usgae在我的應用程序,它表明,大量的內存是由細胞的Excell對象第2代舉起產生。應用程序正在使用EPPlus庫來生成excel文件。理解圖表螞蟻探查

我附上了一些由該工具生成的圖形。 我不知道如何進一步鑽研,找出哪個對象是持有參考&吞噬記憶。請提供關於如何進一步鑽取圖表的建議。

Summary Chart

Instance graph_1

Instance Graph_2

enter image description here

的問題是:該圖再次指向TP相同的對象。我想我沒有正確使用這個工具。

謝謝

回答

0

Firstly-只有你,作爲開發商,知道這些的Excell對象應在內存或沒有(如何將一個外部觀察者知道這是否緩存對象與否,例如)?您可以提供有關是否已在這些對象上調用Dispose的信息。

Secondly-你看到它給你大對象HAP碎片的警告?我會先調查一下。

+0

謝謝你的回覆。看着我附加的第一個grpah說最大的片段大約是41.17 MB(27.4%的可用內存)。我想了解的是那太多了?我應該擔心這個數字嗎?如果是的話,我的下一步應該是什麼?謝謝 – SharpCoder 2013-03-12 03:17:40

+0

我現在可以說的是 - *可能*不是。繼續觀察*隨着時間的推移*。如果內存不隨着時間的推移而增長*你確定,但如果它確實如此 - 開始考慮泄漏。該工具會告訴你爲什麼對象仍然在內存中(當它們可能不應該)。它不僅僅是一門藝術,而是一門藝術;) – 2013-03-26 17:09:03

0

看自己拍攝(從摘要屏幕)我缺乏工作流程爲每個快照的背景下,兩個快照,所以我會作出一些假設:

快照1:先於您創建Excel文件。快照2:在您創建Excel文件後,您認爲此操作已完成。

首先,我建議你稍微調整您的工作流程,並執行以下快照。

快照1:創建Excel文件之前採集。

快照2/3:取決於應用程序的工作流程;如果你創建數據(可以查看它等),然後從這個數據中創建一個文件,然後在數據生成之後創建一個快照,然後在創建文件之後創建一個快照。

最終快照:取最後一個快照 - 這是很好的做法,得到了什麼是在內存中完成的工作流後,因爲它允許終結隊列的清算更好的手感。

這裏將不會有答案,因爲它很難從幾個截圖中做到這一點 - 只是建議 - 我不知道你的應用程序,並假設你想要的內存使用如緩存數據等。

(a)使用帶分類引用的實例分類器視圖選擇您需要從頂部(僅)引用鏈開始,並從右向左工作。再次做出假設(簡單的假設)將超越作爲Excel庫一部分的節點,並查看引用它的類是什麼。 在這一點上,這將使您足以在代碼(b)中查找該引用,或者開始指向深入探索(c)。 (a)如果你認爲這條參考鏈(從右到左的路徑)不值得追求,那麼就轉向下一條。通過Instance Categorizo​​r視圖,您可以使用Right-Left,Top-Botton。 (b)如果你有源代碼,你可以直接點擊一個節點並瀏覽到Visual Studio中的類。或者直接去那裏:>

(c)通過探索(a)更深的參考鏈,我使用鏈接「在此路徑上顯示實例」,然後根據顯示的度量(尺寸,距離來自GC根)選擇該類的一個實例來更詳細地探索。這將帶您進入實例保留圖,它會更詳細地向您顯示該實例的參考鏈。注意這裏的工具提示,彩色區域和節點類型都意味着各種各樣的東西。請參閱下面的鏈接。

我認爲從這個答案中可以清楚地看到,您可能會從查看AMP文檔中受益,因爲有很多東西需要學習,而且我只通過應用程序與您一起走過了一個非常高的層次, (遠至很多)的假設。

見一些幫助鏈接:

Class view filters

Instance Categorizor

Instance retention graph

Large object heap fragmentation tips < - 正如其他海報指出。

Red Gate's learning portal for the Memory profiler < - 也許看影片和技術論文部分

我希望得到你開始。

+0

感謝您快速回復並解釋所有的事情。第一張圖片僅僅是一張彙總圖片,告訴我文件生成後ExcelCell使用61 MB。接下來的3張圖片是對象圖的一部分,它被分成3個(從右到左)。問題是,在我鑽得更遠(從右到左)後,它顯示相同的對象。我希望系統會指出包含所有引用的最終對象。只是想檢查我是否朝着正確的方向前進。 – SharpCoder 2013-03-12 03:14:46