c#-一个对象使用的内存及其依赖项

在C#中,是否可能知道一个对象及其依赖项分配了多少字节?我知道我可以使用dotMemory来做到这一点,但是从GC还是有某种方法可以从C#中获得它?例如,如果我有这个:var x = new Tupleint,int[3] { Tuple.Create(0,0)...

在C#中,是否可能知道一个对象及其依赖项分配了多少字节?我知道我可以使用dotMemory来做到这一点,但是从GC还是有某种方法可以从C#中获得它?

例如,如果我有这个:

var x = new Tuple<int,int>[3] { Tuple.Create(0,0), Tuple.Create(0,0), Tuple.Create(0,0) };

我正在寻找一个类似x.GetTotalMemorySize()的函数,该函数返回76 = 16 3 *(4(8 8)))

即:

16是数组开销中使用的字节数

3是数组中的元素数

4是元组指针使用的字节

8 8是int使用的字节

解决方法:

您可以使用免费的dotMemory Unit框架从代码中测量内存

    var x = new Tuple<int,int>[3] { Tuple.Create(0,0), Tuple.Create(0,0), Tuple.Create(0,0) };
    dotMemory.Check(memory =>
    {
      var objectSet = memory.GetObjects(where => where.Type.Is<Tuple<int, int>[]>())
                            .GetExclusivelyRetainedObjects();

      Console.WriteLine(objectSet);
    });
    GC.KeepAlive(x);

输出:ObjectsCount:4; SizeInBytes:128

更新:当然,我应该选择数组类型“ Tuple< int,int> []”,而不是“ Tuple< int,int>”.更新了代码和输出

本文标题为:c#-一个对象使用的内存及其依赖项

基础教程推荐