- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我还有一个 Unresolved 问题 HERE关于一些可能涉及 LOH 碎片以及其他未知数的绝望内存问题。
我现在的问题是,公认的做事方式是什么?如果我的应用程序需要在 Visual C# 中完成,并且需要处理大型数组到 int[4000000],我怎么能不因为垃圾收集器拒绝处理 LOH 而注定?
似乎我被迫将任何大型数组设为全局数组,并且从不在它们周围使用"new"一词。因此,我只剩下带有“maxindex”变量的不优雅的全局数组,而不是通过函数传递的大小整齐的数组。
我一直被告知这是不好的做法。还有什么选择?
System.GC.CollectLOH("Seriously")
是否有某种功能?是否有可能将垃圾收集外包给 System.GC 以外的东西?
无论如何,处理大型(>85Kb)变量的公认规则是什么?
最佳答案
首先,垃圾收集器确实收集了 LOH,所以不要立即被它的出现吓到。收集第 2 代时收集 LOH。
不同之处在于 LOH 不会被压缩,这意味着如果你有一个生命周期很长的对象,那么你将有效地将 LOH 分成两个部分——这个对象之前的区域和这个对象之后的区域.如果此行为继续发生,那么您最终可能会遇到这样一种情况,即长生命周期对象之间的空间不足以进行后续分配,并且 .NET 必须分配越来越多的内存才能放置大对象,即 LOH变得支离 splinter 。
话虽如此,如果 LOH 末端的区域完全没有事件对象,则 LOH 的大小可能会缩小,因此唯一的问题是如果您将对象长时间放置在那里(例如应用程序的持续时间) ).
从 .NET 4.5.1 开始,LOH 可以被压缩,参见 GCSettings.LargeObjectHeapCompactionMode属性(property)。
避免 LOH 碎片化的策略是:
编辑:双阵列的 LOH 阈值似乎是 8k。
关于c# - 大型阵列和 LOH 碎片。公认的惯例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402282/
具有大量项目的.NET集合是否易于存储在LOH中? 我对列表和字典特别好奇。在我的代码中,我将大量(40k +)相对较小的对象(比如说1k)存储在临时列表和字典中以进行处理。这些收藏中的物品数量是否会
我有几百个 的实例我的类 存在于托管堆中。其中一些位于大对象堆中。下面是各种堆结构的样子 0:000> !EEHeap -gc Number of GC Heaps: 1 generation 0 s
在我的应用程序中,我需要将大文件(大约 250 MB)加载到内存中,我以一种惰性的方式进行——当用户要求查看文件时——我正在加载它。之后,每次用户尝试访问该文件时,我都能立即显示它,因为它已经位于内存
我们在 Server 2012 上有一个使用 WebApi 2、.NET 4.5 的 Web 服务。我们发现延迟偶尔会无缘无故地增加 10-30 毫秒。我们能够将有问题的代码片段追踪到 LOH 和 G
在与一位同事谈论一组特定的应用程序在启动时使用近 1.5G 内存时...他向我指出了一个很好的链接 .NET production debugging 让我困惑的部分是...... For examp
看了一些关于.Net/C#/CLR等的帖子和书籍,在微软2005年的presentation中找到了如下幻灯片: GC takes time – “% time in GC” counter If o
有很多关于 .NET LOH 的可用信息,并且已经在各种文章中进行了解释。但是,似乎有些文章不够精确。 过时信息 在Brian Rasmussen's answer (2009), program m
我正在使用下面的代码将大文件上传到服务器,并注意到将 FileStream 复制到 GetRequestStream 会创建字节数组并将其保存在内存中。这增加了大对象堆,我不想要它。也许有人知道如何解
我还有一个 Unresolved 问题 HERE关于一些可能涉及 LOH 碎片以及其他未知数的绝望内存问题。 我现在的问题是,公认的做事方式是什么?如果我的应用程序需要在 Visual C# 中完成,
我有一个类负责在下载管理器中下载文件。该类负责下载文件并将其写入给定路径。 要下载的文件大小通常在 1 到 5 MB 之间,但也可能更大。我正在使用 WebClient 类的实例从 Internet
我读到,在托管堆中固定对象会影响 .NET 中的 GC 性能,因为如果“妨碍”固定对象,GC 就无法压缩内存。但由于大型对象堆无论如何都不会被压缩,因此这不适用于 LOH 中的对象。固定 LOH 中的
我有一个 OData 响应作为 JSON (只有几 MB) 并且要求流式传输“JSON 的某些部分”,甚至不将它们加载到内存中。 例如:当我读取以下 JSON 中的属性“value[0].Body.C
已开发的新应用程序大量使用 Web 服务。我们开始定期遇到内存不足异常(随着使用量的增加)。在查看内存转储时,我注意到有大量相同大小的 byte[]。查看这些 byte[] 的句柄,我注意到它们被 S
好吧,这是我第一次尝试对 .NET 应用程序进行内存分析(我已经完成了 CPU 调整),但我在这里遇到了一些困难。 我的应用程序中有一个 View ,每页加载 40 张图片(最多),每张图片约 3MB
我是一名优秀的程序员,十分优秀!