内存释放字符串生成器和c#中的d字节[]:内存不足异常

San*_*gar 3 c#

我正在研究c#.我想知道如何释放stringbuilder n byte [] ....因为我在使用字符串生成器时遇到了内存异常....另一件事是String.Replace()也给出了内存不足异常或者还有其他方法可以做同样的事情....请告诉我如何克服这些问题...提前感谢

Mat*_*kon 5

你要建造多大的绳子?你知道前期会有多大吗?如果是这样,请设置 StringBuilder 的容量。

如果您不这样做,它会以 16 的容量开始,然后在每次突破该限制时将其加倍。容量将为 16、32、64、128。

每次执行此操作时,可能都需要重新分配内存。

如果数据那么大,将其构建在文件流中而不是 StringBuilder 中是否更好?


Mar*_*ell 5

如果您正在获得OOM,那么您需要保留太多数据.这听起来像你对我也许应该使用TextWriter(更换StringBuilder)或BinaryWriter/ Stream(更换byte[]) -尤其是StreamWriterFileStream(其写入文件).

例如:

using (TextWriter dest = File.CreateText("out.txt"))
{
    for (int i = 0; i < 100000; i++)
    {
        dest.Write(i);
        dest.Write(": ");
        dest.WriteLine(i % 5000); // why not
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样的基于流的API的优点是,一旦你编写了一个数据块,它就可以被垃圾收集等.