7得票1回答
处理大字符串,这是大对象堆碎片问题吗?

我有一个.NET 3.5应用程序。 一个函数运行了一百万次 它在1MB+字符串(不同大小的字符串)中执行搜索、替换和正则表达式操作 当我对应用程序进行分析时,我可以确认这些字符串存储在LOH中,但稍后被GC回收,因此在给定时间内只有最多10个字符串在LOH中(10个线程正在运行)。 ...

16得票3回答
使用字节数组时的堆碎片问题

我有一个使用C# 4.0编写的单生产者/单消费者应用程序,它以块为单位传输大量数据。尽管没有新的内存分配,但是经过一段时间后我会耗尽内存。 我使用Redgate Memory Profiler对内存进行了分析,发现有很多可用的空闲内存。但由于碎片化,无法使用这些空闲内存。 我使用阻塞集合作...

11得票4回答
大对象堆和来自队列的字符串对象

我有一个 Windows 控制台应用程序,它应该在数天或数月内无需重新启动即可运行。该应用程序从 MSMQ 中检索“工作”并对其进行处理。有 30 个线程同时处理工作块。 来自 MSMQ 的每个工作块大约为 200KB,其中大部分分配在单个字符串对象中。 我注意到,在处理约 3-4 千个这...

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

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

26得票3回答
垃圾收集即使在需要时也没有发生

我做了一个64位的WPF测试应用程序。在我的应用程序运行并打开任务管理器时,我观察系统内存使用情况。我看到我正在使用2GB,并且有6GB可用。 在我的应用程序中,我点击一个添加按钮,将一个新的1GB字节数组添加到列表中。我看到我的系统内存使用量增加了1GB。我总共点击了6次添加按钮,填满了我...

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

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

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

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

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

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

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

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

8得票1回答
.NET进程的内存转储中存在大量未解释的内存

我无法解释C#进程使用的大部分内存。总内存为10GB,但所有可达和不可达对象总共只有2.5GB。我想知道这7.5GB可能是什么? 我正在寻找最有可能的解释或一种查找此内存的方法。 以下是具体情况。该进程是.NET 4.5.1。它从互联网下载页面并使用机器学习进行处理。根据VMMap显示,内...