2011-10-31 26 views
4

我想計算一個進程在.net中使用的總內存。這裏的總內存包括頁面文件和RAM使用量。我發現最接近的是Process class中的VirtualMemorySize64,但它總是低於第三方內存診斷軟件顯示的總內存使用量。如何在.net中獲取/計算進程使用的總內存?

+2

VirtualMemorySize64應該是正確的屬性使用,我很驚訝,它比預期的小。你在說什麼其他工具/計數器? – Justin

+0

我使用的VMMap總是顯示的總內存大於我從VirtualMemorySize64獲得的內存。 – user1004959

+1

有趣 - 我不確定。我最好的猜測是,VMMap正在計算額外的「內存」(比如「不可用」的內存),但我看不到什麼。 – Justin

回答

0

謝謝賈斯汀。我結束了使用System.Diagnostics.Process.VirtualMemorySize64

0

如果您完全對物理內存感興趣,那麼您可能需要WorkingSet64,它會給出「分配給相關進程的物理內存量」。瞭解這個價值不斷波動,這個電話給你的價值可能不是最新的。您也可能對PeakWorkingSet64感興趣,它給出「相關進程使用的最大物理內存量」。

爲了計算頁面文件使用PagedMemorySize64。 「此屬性返回的值表示進程使用的虛擬內存頁面文件中的當前內存大小,操作系統使用虛擬內存頁面文件與物理內存一起管理每個進程的虛擬地址空間。」

+0

這隻包括進程使用的物理內存,不包括頁面文件用法。 – Justin

+0

對不起,我只是編輯我的答案,包括有關頁面文件的使用情況 – alykhalid

0

「我的進程使用的總內存」的定義是未定義的,因爲有很多不同類型的內存,它們意味着不同的事情,並且您需要回答很多問題才能準確定義它。這裏有一些:

  1. 你是否包含代碼和數據的代碼,或只有數據?
  2. 如果此代碼當前與其他進程共享(例如,兩者都使用的通用DLL),該怎麼辦?
  3. 您是否僅包含已提交的內存或已分配的所有內存?
  4. 您的進程可以將內存分配爲「共享」,但它目前不與任何人共享。所以它不會出現在任何工作集中,但它實際上僅用於您的流程。

有一個很好的兩部分的講座,可以回答你的問題。但你需要投入2個小時的時間來觀看它:)。 Part 1Part 2

相關問題