我正在开发一个 C# 应用程序,这个应用程序正面临内存紧缩,因为许多对象在大对象堆中获得内存分配。
我的 C# 应用程序必须处理许多大文件(作为字符串对象),因此此字符串类型对象的内存会从大对象堆中一次又一次地分配(从而导致 LOH 碎片)。
由于 string 是一个不可变对象,因此 LOH 中的新内存总是分配给该对象。我的问题是,有没有办法,我可以在大对象堆中预先分配一些内存,并始终为字符串对象分配相同的内存。
这是更详细的事情:正如我所提到的,我正在处理这些大文件。要进行处理,我必须将其转换为字符串。即使我使用 stringBuilder,它也不会有太大帮助,因为一旦我将它转换为字符串,就会在 LOH 中为此分配一个单独的内存。
所以,我期待在内存中分配一堆,比如说 100 KB,每当我读取一个新文件并将其转换为字符串时,这 100 KB 就会被分配。