![]() |
1
10
每次StringBuilder耗尽空间时,它都会重新分配一个新缓冲区,大小为原始缓冲区的两倍,复制旧字符,并让旧缓冲区获得GC'd。您可能只是使用了足够的内存(称为x),因此2x比允许分配的内存大。您可能需要确定字符串的最大长度,并将其传递给StringBuilder的构造函数,以便进行预分配,而不受加倍重新分配的影响。 |
![]() |
2
6
String Concatenation vs Memory Allocation .
|
![]() |
3
3
Ropes: Theory and practice 解释了它们的优势。也许有一个.NET的实现。
它使用更少的内存吗?搜索
在本文中,您将发现一些提示。
http://www.sgi.com/tech/stl/Rope.html )。也许您可以利用此实现。注意,我引用的页面有一个关于内存性能的工作。 请注意,绳索并不是解决所有问题的良方:它们的有用性在很大程度上取决于您如何构建大型字符串以及如何使用它们。文章指出了优点和缺点。 |
![]() |
4
1
Strigbuilder是解决串接字符串引起的内存问题的完美解决方案。 为了回答您的特定问题,Stringbuilder的开销是恒定的,而普通字符串的长度等于当前分配的Stringbuilder缓冲区的长度。缓冲区的大小可能是结果字符串的两倍,但在缓冲区填满之前,连接到Stringbuilder时不会再进行内存分配,因此这确实是一个很好的解决方案。 与string相比,这是非常出色的。
这段代码中有四个字符串作为文本存储在代码中,两个是在方法中创建的,一个是从变量中创建的,但是它使用了六个独立的中间字符串,它们越来越长。如果这种模式继续下去,它将以指数级的速度增加内存使用,直到GC开始清理它。 |
![]() |
5
-2
我不知道stringbuilder的内存模式,但是公共字符串不是一个选项。 当您使用公共字符串时,每次连接都会创建另外两个字符串对象,内存消耗急剧上升,使得垃圾收集器被调用的次数过多。
|
![]() |
Hamid · 使用与先前打开完全相同的地址结构启动进程 7 年前 |
![]() |
Thomas Flinkow · 进程终止时是否回收内存? 7 年前 |
![]() |
shle2821 · Xcode可以使用64GB或更大的RAM吗? 7 年前 |
![]() |
iveqy · 使用lpddr2引导sama5d2 7 年前 |