添加到大对象堆中的对象

达伦·杨(Darren Young)

我正在尝试调试旧版网站中CPU使用率高的原因,并且从DebugDiag中的一些分析来看,我怀疑LOH上的对象数量以及随后的GC收集可能是原因。在一个.dbg文件中,LOH上有〜3.5gb,其中大多数对象是字符串。

我知道要使对象在LOH上运行,它们必须超过85000个字节。

我不确定的是例如是否指向单个数组。还是可以引用大型对象图?

我的意思是,如果我有对象Foo,它包含n个其他对象,每个对象本身都包含n个对象。如果这些对象中的每个对象都包含字符串,并且Foo(以及所有子对象)的总大小大于85000字节,那么Foo会放在LOH上吗?或者,如果在Foo对象图中某处有一个大于85000字节的单个数组,那仅仅是放在LOH上的那个数组吗?

谢谢。

网步

没错,如果数组大于85000,那么它将被视为LOH而不是整个对象。为了解释这一点,我创建了示例。

   class Program
    {
        static void Main(string[] args)
        {
            Obj o = new Obj();
            o.Allocate(85000);
            Console.WriteLine(System.GC.GetGeneration(o));
            Console.WriteLine(System.GC.GetGeneration(o.items));
            Console.WriteLine(System.GC.GetGeneration(o.items2));
            Console.WriteLine(System.GC.GetGeneration(o.Data));
            Console.ReadLine();           
        }

        class Obj
        {
            public byte[] items = null;

            public byte[] items2 = null;

            public string Data = string.Empty;

            public void Allocate(int i)
            {
                items = new byte[i];
                items2 = new byte[10];
                Data = System.Text.Encoding.UTF8.GetString(items);
            }
        }
    }

在这里,如果您注意到该字符串数据。由于字符串是字符数组,因此也被视为LOH。Items2不是LOH,Items是LOH,但实际对象o不是LOH。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法添加到ArrayList中的对象

来自分类Dev

无法添加到ArrayList中的对象

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

将属性添加到嵌套对象中的对象

来自分类Dev

将对象添加到对象数组

来自分类Dev

将数组对象添加到对象

来自分类Dev

将对象添加到对象数组

来自分类Dev

将属性添加到JavaScript中的函数中的对象?

来自分类Dev

将对象添加到BindingList中的BindingList中

来自分类Dev

将数组中的对象数组添加到 JSON 中

来自分类Dev

如何将对象添加到向量中?

来自分类Dev

将$$ hashKey添加到Angular中的对象

来自分类Dev

将对象添加到Powershell中的容器

来自分类Dev

在Julia中添加到集合时重载对象比较?

来自分类Dev

将对象添加到构造函数中的数组

来自分类Dev

将元素添加到作为对象属性的数组中

来自分类Dev

将对象添加到Java MongoDB中的数组

来自分类Dev

将调用方法的对象添加到列表中

来自分类Dev

将项目信息添加到规则中的交易对象

来自分类Dev

将属性值添加到字典中的对象

来自分类Dev

将键值对添加到javascript中的对象数组?

来自分类Dev

将新对象添加到Chrome本地存储中

来自分类Dev

RxJava将新对象添加到流中

来自分类Dev

添加到关系后在coredata中找不到对象

来自分类Dev

将CSS属性添加到对象的集合中

来自分类Dev

C ++:将对象添加到集合中

来自分类Dev

将值添加到对象PHP中的数组

来自分类Dev

在RealmMigration中创建对象并将其添加到RealmList