将字符串放入内存并稍后保存

时间:2014-05-11 03:28:08

标签: c# string performance memory streamwriter

我有一个程序可以创建一个巨大的字符串,对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
    }
}

`

1 个答案:

答案 0 :(得分:1)

这是一个可以帮助您的代码段。我刚刚在VS 2012中测试过它:

using (MemoryStream ms = new MemoryStream)
{

    StreamWriter sw = new StreamWriter(ms, System.Text.Encoding.UTF8)
    sw.WriteLine("This is a test.");
    sw.WriteLine("This is a second line.");
    sw.Flush();

    using (FileStream fs = new FileStream("Test.txt", FileMode.Create))
    {
        ms.CopyTo(fs);
    }

    sw.Close();
}

文件内容为:

This is a test.
This is a second line.

您需要对其进行修改以适合您的程序设计,但基本的想法是使用StreamWriter将文本写入MemoryStream,然后将MemoryStream写入文件采用MemoryStream.CopyTo方法(需要Stream)。

小心你如何构建东西 - 如果你关闭StreamWriter,它也会关闭MemoryStream(我第一次测试时,StreamWriter位于using 1}}在MemoryStream使用块内阻塞,然后尝试访问封闭流时出错。

希望这至少会让你朝着正确的方向前进。

修改

您需要在方法中初始化StreamWriter,而不是字段变量。

这样的事情:

public class ImageProcessor
{

    MemoryStream ms = new MemoryStream();
    StreamWriter sw;

    public Bitmap Rendering(string bmpPath)
    {

        sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
    }
}