如何准确测量C#代码中的内存分配?

kDa*_*Dar 5 c# .net-core

我正在尝试测试我的 .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}");
Run Code Online (Sandbox Code Playgroud)

对于 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}");
Run Code Online (Sandbox Code Playgroud)

对于 1、100、500、1000 和 10,000,我分别得到 32、224、1024、2024、20024。

我期望的是:2 * 数组长度,因为 sizeof(char) 是 2。

  1. 以上哪种方法是正确的?如果没有,正确的方法是什么?
  2. 也许我的期望不正确?
  3. 如果可能的话,我想解释一下结果以及为什么它们不同。

提前致谢