10得票2回答
大对象堆友好的IDictionary

我们有一个应用程序,其中包含大量对象存储在多个字典中,其中一些在应用程序的生命周期内不断增长(具有大量工具和不断增长的订单/交易的交易应用程序)。 我们遇到了由于大对象堆的碎片化而导致的 OutOfMemoryException 问题。 为了解决这个问题,我尝试编写了一个“大型”字典,它作...

10得票1回答
无法使用-XX:+UseLargePages创建JVM

我有一个Java服务,当前使用14GB堆内存。我想尝试使用-XX:+UseLargePages选项,看看这对系统性能会有什么影响。我已经按照Oracle的说明配置了操作系统,使用适当的共享内存和页面值(也可以使用在线工具进行计算)。 一旦操作系统配置完毕,我可以看到它分配了预期数量的内存作为大...

16得票6回答
大型数组和LOH碎片化。什么是公认的惯例?

我有一个活跃的问题是关于一些无望的内存问题,可能涉及LOH碎片以及其他未知因素。请点击此处查看。 我的问题是,什么是被接受的做法呢? 如果我的应用程序需要使用Visual C#完成,并且需要处理int [4000000]这样规模的大数组,如何避免垃圾回收器拒绝处理LOH的情况发生? 似乎我...

9得票1回答
C#中的大对象在中等大小集合中

我对内存问题还很陌生,希望你不会觉得这是一个愚蠢的问题。 我知道在C#中,大于85,000字节的内存将被放入LOH中,例如: Byte[] hugeByteCollection = new Byte[85000]; 我想知道一个包含10个成员变量(字节类型)的对象,大小为10000-...

7得票1回答
减少大对象堆中相同对象的多个副本

我正在试图使用HTTPWebRequest将一个大文件(约30MB)的字节上传到某个服务器。问题在于,由于字节数量超过85000,它被存储在大对象堆(LOH)中。问题在于,我的代码至少创建了5个相同对象的实例,然后即使关闭响应流之后也无法从内存中移除。以下是导致此问题的代码片段。在此代码块之前...

9得票6回答
我应该在使用大对象堆之后立即调用GC.Collect以防止碎片化吗?

我的应用程序需要大量二进制序列化和压缩大对象。序列化数据集未经压缩时约为14 MB,压缩后约为1.5 MB。我发现每当我对数据集调用serialize方法时,我的大对象堆性能计数器会从不到1 MB跳到大约90 MB。我还知道,在相对繁忙的系统下,在运行一段时间(几天)且进行了几次序列化处理后,...

10得票4回答
只在第二代和大对象堆上执行GC.Collect

我的应用程序有一个特定的时间点,当许多大对象同时被释放时。那个时候,我想专门在大对象堆(LOH)上进行垃圾回收。 我知道你无法这样做,必须调用GC.Collect(2),因为仅当它执行第二代垃圾回收时,GC才会对LOH进行回收。然而,根据文档中的说明,调用GC.Collect(2)仍会在第一...

9得票2回答
Protobuf-net序列化分块字节数组的内存使用情况

在我们的应用程序中,我们有一些数据结构,其中包含一组分块的字节(目前暴露为List<byte[]>)。我们将字节分块是因为如果允许将字节数组放在大对象堆上,则随着时间的推移,我们会遭受内存碎片化的影响。 我们还开始使用Protobuf-net来序列化这些结构,使用我们自己生成的序...

8得票6回答
大对象堆碎片化:CLR是否有解决方案?

如果您的应用程序需要频繁分配/释放大型对象(>85000字节),最终会导致内存碎片化,并且您的应用程序将抛出内存不足异常。 这个问题有解决方案吗?还是CLR内存管理的限制?

125得票5回答
为什么要关注大对象堆(Large Object Heap,LOH)?

我已经了解了代和大对象堆,但我仍然无法理解拥有大对象堆的意义(或益处)是什么? 如果CLR只依靠第二代来存储大型对象(考虑到Gen0和Gen1的阈值过小),可能会出现什么问题(在性能或内存方面)?