2013-06-25 57 views
0

我想使用UMDH來尋找巨大的內存塊正在分配,但我得到的結果似乎完全荒謬。UMDH&perfmon私人字節

我啓動程序,等待它達到平衡,然後用umdh抓取快照。然後,我執行導致它吸取記憶的活動,等待它再次達到平衡,並抓住另一個快照。然後我運行一個DIFF:

umdh -d -v 1.txt 2.txt > diff.txt 

我目睹性能監視器(其它內存計數器也相應增長)的額外的專用字節500M。 UMDH差異顯示「減少......」一些巨大的數字。說什麼???任何人都可以解釋爲什麼可能是這種情況?

然後我評論了最大增長堆棧中報告的函數中的所有活動。我再次進行了上述再生,觀看了同樣的500M增長模式,但是UMDH在內存使用中報告了小的增加!在那裏非常小的操作詞。

第一部分真的讓我大跌眼鏡。什麼會導致UMDH顯示堆使用減少,但perfmon顯示相同進程分配的內存使用量有相當大的增加?

我認爲線程堆棧,但線程堆棧計數實際上下降。還有什麼可以進入「私人字節」?

回答

0

將調試信息文件,即pdb,放入exe的相同路徑。下面的命令工作,用實際的進程ID替換PID要轉儲:

umdh -p:PID -f:memlog1.txt 

umdh -p:PID -f:memlog2.txt 

umdh memlog1.txt memlog2.txt > result.txt 

如果你看到下面的警告:

Warning: 
Warning: UMDH didn't find any allocations that have stacks collected. 
Warning: Use gflags to enable allocation stack collection. 
Warning: Restart the application for the setting to be in effect. 

運行:

gflags -i "full\path\of\exe" +ust 

,並重新啓動該exe再次運行umdh之前。