2014-12-05 514 views

回答

0

內存在Windows是一個相當複雜的事情:有很多不同的測量。看看here(大概半路)開始。

但是,您可以猜測,Profiler使用的57MB專用字節與任務管理器使用的55MB相同。搜索Windows Memory Private Bytes(我認爲它與鏈接頁面中的Private Working Set相同)。

我不知道如何組織內存的任何簡單摘要。但是,除了您正在使用的簡單對象之外,還有更多內存加載到內存中。有你的代碼(必須加載或不能運行),.NET運行時,Stacks可以跟蹤代碼中的位置以及當前方法結束時返回的位置等等。等等。一些內存可以在不同的進程之間共享,如果它不會被改變:.NET運行時,你自己的代碼(可能)。一些不會被共享:你的數據,你的堆棧。

分配內存不僅僅是「哦,你需要存儲一個50字節的字符串 - 在這裏你!」。一次分配50個字節效率低下。你的程序在開始時會抓取一大堆內存(實際上稱爲堆),然後逐漸使用它。當它被全部使用時,它將更多地獲得堆。我不確定什麼.NET運行時作爲默認值 - 可能至少爲64K,但可能更多。正如我所說,這很複雜。

0

專用字節是進程分配的頁面。這通常用於存儲數據。

CLR代表您的託管應用程序分配內存。這反映在專用字節中。這個內存 - 託管堆 - 以塊分配。託管應用程序創建存儲在託管堆上的對象。除了託管堆外,CLR還分配內部使用的內存。這也增加了專用字節。

對象的總大小是當前分配的對象的大小的總和。該數字總是小於專用字節。