【问题标题】:Is this an efficient way to measure the memory size of an object?这是测量对象内存大小的有效方法吗?
【发布时间】:2014-04-21 16:41:13
【问题描述】:

我正在制作一款游戏,我想测量我正在测试的一个概念会占用多少内存。我知道它不会 100% 准确,但这是否给了我关于物体大小的可靠大致数字?

using System;
using System.Collections.Generic;

namespace Sandbox
{
    public class Program
    {
        public static void Main(string[] args)
        {

            long startMemory = GC.GetTotalMemory(true);
            Dictionary<short, KeyValuePair<short, short>> values = new Dictionary<short, KeyValuePair<short, short>>();
            for (short i = 0; i < 3000; i++)
            {
                values.Add(i, new KeyValuePair<short, short>(short.MaxValue, short.MaxValue));
            }
            Console.WriteLine(GC.GetTotalMemory(true) - startMemory);
        }
    }
}

【问题讨论】:

  • 为什么要知道大小?你想完成什么?
  • @BrianRasmussen 我想要完成的是无关紧要的,知道如何测试对象的内存大小是一件很有价值的事情。但我正在测试一个可能需要存储数十万个矢量点的游戏概念。我已经测试了几种方法,看看哪种方法占用的内存最少,现在我想确保我的测量结果总体上是准确的。
  • 如果出于某种原因显式处理内存很重要,.NET 可能不是最佳选择,因为根据设计,运行时不会为您提供深入研究细节的必要工具。 FWIW 如果您确实想知道托管对象的大小,SOS 调试器扩展或内存分析器可能是您的最佳选择。
  • 我想我会检查一下 SOS 扩展,它看起来非常有用。谢谢!

标签: c# .net performance memory xna


【解决方案1】:

并非如此,因为您无法控制 GC 何时释放内存,并且它可能发生在您的测量之间。此外,据我了解,GC 不会计算位于堆栈内存而不是堆上的结构。

知道自己使用的每个项目占用多少内存,自己总结可能更准确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2010-11-30
    • 2011-06-17
    相关资源
    最近更新 更多