gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:07:44 26 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com