C#并在内存中存储数据

时间:2010-01-29 20:33:42

标签: c# .net winforms scope

我正在使用Visual C#.NET,正在创建一个使用winforms的应用程序。我基本上需要打开多个文件作为字符串,并在不同的地方操纵数据而不将信息保存回文件。如何存储这些数据以便我可以在代码的各个部分使用它?

5 个答案:

答案 0 :(得分:3)

创建一个包含文件字符串作为公共属性的单例,并使单例公开。

http://msdn.microsoft.com/en-us/library/ms998558.aspx

答案 1 :(得分:0)

我可能会使用静态类,除非你没有提到其他要求。

public static class MyFilesAsStrings
{
    public static String FirstFile {get;set;}

    public static LoadData() 
    {
        FirstFile = System.IO.File.ReadAllText(@"C:\Temp\MyFile.dat");
        // and so on
    }
}

答案 2 :(得分:0)

为什么要打开它们“作为字符串”? .NET中的字符串是不可变的,因此如果您进行大量更改,它可能会变得昂贵。通常的方法是将数据解析/反序列化为对象模型,并将该对象模型传递到表单中 - 即

MyModel model = MyModel.Load(path);
MyForm form = new MyForm();
form.Model = model;

或类似的。然后您的表单可以访问模型的属性:

captionTextBox.Text = model.Title; // etc
如果你真的想要

或使用数据绑定:

captionTextBox.DataBindings.Add("Text", model, "Title");

(将启用单向或双向绑定,具体取决于您的模型是否也提供更改通知)

答案 3 :(得分:0)

您可以采取多种方法。

如果文件是中小型的,您可以将内容加载到StringBuilderStringWriter,并将其存储在Dictionary的文件名索引中。

如果文件很大,您可以这样做,但您可能需要考虑在使用它们时将StringWriter的内容保存到临时文件,并根据需要从临时文件重新加载。

如果文件很大,你只能读取文件中的部分或页面,并以与小文件相同的方式管理它们,除非磁盘上每个文件都有很多,所以你可能会这样做将它们存储在List或类似的地方。

还有“复制到临时文件 - 编辑然后复制”的方法。简单,容易和有效,即使它确实使用了很多磁盘。

答案 4 :(得分:0)

我不确定我是否理解Singleton在这种情况下给你的东西,除了确保你没有多个字符串的副本。它无助于修改字符串本身。

我读到你的问题的方式是在内存中操作字符串(不写回文件)是至关重要的。基于此,有两个主要选项,StringBuilder和MemoryStream。

StringBuilder专门用于有效修改或附加到表示为字符串的数据。如果文件不是太大而不适合内存,StringBuilder是最好的选择。

您只需将文件的内容传递给StringBuilder构造函数即可。然后使用Append(),Insert(),Remove(),Replace()或indexer []等方法根据需要修改字符串数据。 Stringbuilder确保这些操作比在标准字符串上执行相同操作更有效。

您还可以将文件加载到MemoryStream中,然后使用StringReader(或StringWriter)获取类似于Stream的接口(Read(),Peek(),ReadLine()等)操纵字符串。

它比StringBuilder更多,但如果Stream样式方法更适合您的应用程序,则可能更受欢迎。