【发布时间】:2023-03-17 09:48:02
【问题描述】:
我有一个程序会创建一个巨大的字符串,对于 StringBuilder 来说太大而无法处理。我想将它存储在内存中,然后在以后将其保存到用户定义的目录中。
我尝试了StreamWriter,但我需要在创建目录时声明它,这是问题,因为如果用户选择“保存到文本文件”,我稍后会得到该目录。
基本上我需要它:
-创建任何实例(公共且在类范围内,不能在方法范围内)
-向实例添加字符串
-然后,稍后,每当用户决定时,将其保存到文件中。我知道它会占用大量 RAM,而且我相信它只会在 50-100Mb 左右,这还不错。
public class ImageProcessor
{
MemoryStream ms = new MemoryStream();
StreamWriter sw;
public Bitmap Rendering(string bmpPath)
{
sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
using (ms)
sw.Write(Convert.ToString(ArGBformat)); //Error is here
}
}
`
【问题讨论】:
-
你如何确定它对于
StringBuilder来说太大了?唯一的limiation on StringBuilder isIntMax(2.1GB)。 -
@ErikPhilips 我收到与
StringBuilder相关的“OutOfMemoryException” -
为什么不使用
MemoryStream,然后当用户决定保存时,将其保存到文件中? -
@Tim 我该怎么做呢?你能告诉我答案选择中的 sn-p 吗?
-
你没有提到框架版本,但是从 4.0 版开始,.net 框架不再需要内存流,字符串生成器实例使用连续内存。在从 4.0 开始运行良好的旧版本上,您可以很容易地遇到内存不足的情况
标签: c# string performance memory streamwriter