c# - 在大对象堆内存中预分配一些内存

标签 c# .net memory-management fragmentation large-object-heap

我正在开发一个 C# 应用程序,这个应用程序面临内存紧缩,因为许多对象都在大对象堆中分配内存。

我的 C# 应用程序必须处理许多大文件(作为字符串对象),因此此字符串类型对象的内存一次又一次地从大对象堆中分配(从而导致 LOH 碎片)。

由于string是一个不可变的对象,LOH中的一个新内存总是分配给这个对象。 我的问题是,有没有办法,我可以在大对象堆中预先分配一些内存,并始终将相同的内存分配给字符串对象。

下面是更详细的内容: 正如我提到的,我正在处理这些大文件。要进行处理,我必须将其转换为字符串。即使我使用 stringBuilder,它也没有多大帮助,因为一旦我将它转换为 String,就会在 LOH 中为它分配一个单独的内存。

所以,我期望在内存中分配一堆,比方说 100 KB,每当我读取一个新文件并将其转换为字符串时,就会分配这 100 KB。

最佳答案

你应该使用 StringBuilder对象来处理字符串,因为它是一个可变字符串,并提供许多方法来处理它。

你是说每个字符串都是一次又一次地创建的。如果出于某种原因,您必须使用字符串,只需 Intern它们 - 它们将存储一次,并且不会再次添加到内存堆中

关于c# - 在大对象堆内存中预分配一些内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6316073/

相关文章:

c# - NinjectModule 的加载顺序

c# - c#中构造函数参数的名称

c - 堆栈上的总变量大小是否有限制?

java - XX :MaxDirectMemorySize, Xmx,XX:JavaMemMax 之间的区别

.net - ASP.NET MVC View 全局化

ios - 找到保留周期的最佳方法?

c# - 找不到 Cefsharp CefSettings 和 RegisterScheme

c# - 如何从 ASP.NET MVC 网站中生成可下载的 c# 类?

.net - .NET 的线程安全缓存库

.net - Nuget System.Data.SqlClient 破坏了我的项目