我们的应用程序需要不断分配大量数据的数组(例如数十到数百兆字节),这些数组在被丢弃前只存在短暂的时间。如果处理方式不当,可能会导致大对象堆碎片化,最终导致应用程序崩溃并出现OutOfMemoryException异常,尽管当前活动对象的大小并不过多。 我们之前已经成功采用了一种方法来解决这个...
在我们的应用程序中,我们有一些数据结构,其中包含一组分块的字节(目前暴露为List<byte[]>)。我们将字节分块是因为如果允许将字节数组放在大对象堆上,则随着时间的推移,我们会遭受内存碎片化的影响。 我们还开始使用Protobuf-net来序列化这些结构,使用我们自己生成的序...
我的应用程序有一个特定的时间点,当许多大对象同时被释放时。那个时候,我想专门在大对象堆(LOH)上进行垃圾回收。 我知道你无法这样做,必须调用GC.Collect(2),因为仅当它执行第二代垃圾回收时,GC才会对LOH进行回收。然而,根据文档中的说明,调用GC.Collect(2)仍会在第一...
如果您的应用程序需要频繁分配/释放大型对象(>85000字节),最终会导致内存碎片化,并且您的应用程序将抛出内存不足异常。 这个问题有解决方案吗?还是CLR内存管理的限制?
我们有一个应用程序,其中包含大量对象存储在多个字典中,其中一些在应用程序的生命周期内不断增长(具有大量工具和不断增长的订单/交易的交易应用程序)。 我们遇到了由于大对象堆的碎片化而导致的 OutOfMemoryException 问题。 为了解决这个问题,我尝试编写了一个“大型”字典,它作...
我有一个使用C# 4.0编写的单生产者/单消费者应用程序,它以块为单位传输大量数据。尽管没有新的内存分配,但是经过一段时间后我会耗尽内存。 我使用Redgate Memory Profiler对内存进行了分析,发现有很多可用的空闲内存。但由于碎片化,无法使用这些空闲内存。 我使用阻塞集合作...
我有一个.NET 3.5应用程序。 一个函数运行了一百万次 它在1MB+字符串(不同大小的字符串)中执行搜索、替换和正则表达式操作 当我对应用程序进行分析时,我可以确认这些字符串存储在LOH中,但稍后被GC回收,因此在给定时间内只有最多10个字符串在LOH中(10个线程正在运行)。 ...
如何在大字符串中运行多个正则表达式(以查找匹配项)而不会导致LOH碎片化? 使用.NET Framework 4.0,因此我正在使用StringBuilder,因此它不在LOH中,但是一旦我需要对其运行RegEx,我就必须调用StringBuilder.ToString(),这意味着它将位于...
我有一个Java服务,当前使用14GB堆内存。我想尝试使用-XX:+UseLargePages选项,看看这对系统性能会有什么影响。我已经按照Oracle的说明配置了操作系统,使用适当的共享内存和页面值(也可以使用在线工具进行计算)。 一旦操作系统配置完毕,我可以看到它分配了预期数量的内存作为大...
我无法解释C#进程使用的大部分内存。总内存为10GB,但所有可达和不可达对象总共只有2.5GB。我想知道这7.5GB可能是什么? 我正在寻找最有可能的解释或一种查找此内存的方法。 以下是具体情况。该进程是.NET 4.5.1。它从互联网下载页面并使用机器学习进行处理。根据VMMap显示,内...