簡體   English   中英

如何准確地測量C#代碼中的內存分配?

[英]How to accurately measure memory allocation in C# code?

我正在嘗試測試.Net Core代碼的一部分分配多少內存,並且我想出了兩種選擇,兩者都給我帶來困惑的答案。

第一次嘗試:

    var before = GC.GetTotalMemory(false);
    var temp = new char[1];
    var total = GC.GetTotalMemory(false) - before;
    Console.WriteLine($"Memory allocated in bytes: {total}");

對於1、100、500和1000,我得到0。對於10,000,我得到20048。

第二次嘗試:

    var before = GC.GetAllocatedBytesForCurrentThread();
    var temp = new char[1];
    var total = GC.GetAllocatedBytesForCurrentThread() - before;
    Console.WriteLine($"Memory allocated in bytes: {total}");

對於1、100、500、1000和10,000,我分別得到32、224、1024、2024和20024。

我所期望的:2 *數組長度,因為sizeof(char)為2。

  1. 上面哪種方法是正確的? 如果沒有,正確的方法是什么?
  2. 也許我的期望不正確?
  3. 如果可能的話,我想解釋一下結果以及它們為何不同。

提前致謝

上面哪種方法是正確的? 如果沒有,正確的方法是什么?

據我所知,沒有任何方法可以精確地測量標准C#領域中分配的內存使用情況。 但是,就.net庫而言,它似乎已經找到了。 它們正確(在.net框架世界中),但是它們都測量不同的事物。


如果可能的話,我想解釋一下結果以及它們為何不同。

您可以期望GC.GetAllocatedBytesForCurrentThread您的線程(即“ CurrentThread”)計數每個分配作為每個分配的一部分的費用,盡管我找不到任何文檔,所以這只是一個猜猜 您可以期望GC.GetTotalMemory可以對每個線程以及更多線程執行此操作,盡管結果可能不像您看到的那樣同步。


我認為GC的簿記無關緊要。

這是我們大多數人不同意的觀點。 如果要測量分配的總字節數減去開銷 ,則需要詢問有關.net框架的更具體的問題(因為這已經超出C#領域)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM