我使用C#爲什麼create-dump-file操作會極大地增加工作集(Memory)的大小?
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.Read();
}
}
寫了一個Hello世界的控制檯應用程序,當我啓動它,它採取的記憶是:
於是,我試圖創建此進程的轉儲文件:
創建轉儲後,這個過程花了內存:
你可以看到工作組大小的變化,這對我來說是一個驚喜。
別的東西有趣的關於這個內存增量是:
- 後,我的進程的內存工作集增加到46 MB,看來它並沒有減少回7 MB了。
- 轉儲文件的大小不是7MB,而是46 MB。從1.83MB到2.29MB
而且,這裏
1.爲什麼有內存增量與創建轉儲操作相處?
2.過去,當測試人員報告內存泄漏問題並向我發送轉儲文件時,我將轉儲文件大小視爲目標進程在實驗室環境中執行的內存大小。但從上面的簡單例子來看,似乎我總是錯了?
3.我非常好奇46MB轉儲文件的內容(另一種說法,我對目前的hello world應用程序爲何需要46 MB內存感到好奇)。我熟悉SOS命令,比如!DumpHeap或!eeheap,但這些命令不足以告訴46MB大小文件中的所有內容。任何人都可以分享一些有用的工具,鏈接或說明?
非常感謝您的幫助!
看到相關:http://stackoverflow.com/questions/1984186/what-is-private-bytes-virtual-bytes-working-set你會發現你的私人字節和提交大小沒有太大的變化,它是私人字節,你應該看看,但即使如此,它是一個更復雜,如果你讀LINKK – EdChum 2014-09-19 10:10:35
回答你的問題,增加是由於內存轉儲生成,並將包括內存映射信息,但不嚴格使用它當前因此你的私有字節沒有增加太多,最終的轉儲文件可能是你的進程使用的總內存,但它取決於用來生成轉儲的標誌,因爲附加的處理信息和其他東西可能在轉儲中:http:// blogs。 msdn.com/b/debugger/archive/2009/12/30/what-is-a-dump-and-how-do-i-create-one.aspx – EdChum 2014-09-19 10:14:27