我正在使用Visual C#.NET,并且正在制作使用winforms的应用程序。我基本上需要以字符串的形式打开多个文件,并在各个地方操作数据,而不将信息保存回文件。我如何去存储这些数据,以便我可以在我的代码的各个部分使用它?C#并将数据存储在内存中
回答
为什么要打开它们“as strings”? .NET中的字符串是不可改变的,所以如果你做了很多改变,它可能会变得昂贵。正常的方法将是解析/反序列化数据伸到对象模型,并传递对象模型到您的形式 - 即
MyModel model = MyModel.Load(path);
MyForm form = new MyForm();
form.Model = model;
或相似。那么你的表格可访问性模型:
captionTextBox.Text = model.Title; // etc
或使用数据绑定,如果你真的想:
captionTextBox.DataBindings.Add("Text", model, "Title");
(这将使1路或2路的结合,这取决于是否您的模型还提供更改通知)
创建一个包含文件字符串作为公共属性的单例,并使公共属性成为单例。
它会工作(至少直到你有多个线程),但过度使用单身通常是在路上的设计问题的标志... – 2010-01-29 20:41:51
确保你创建一个单身而不是* S * ingleton。 http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/ – dss539 2010-01-29 20:44:34
有什么理由认为单身人士被滥用?猜测什么可能导致问题的应用程序的上下文我们一无所知似乎相当似是而非。 – 2010-01-29 20:45:50
我可能会使用一个静态类,除非有你没有提到的其他要求。
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
}
}
您可以采取多种方法。
如果这些文件是小到中等大小,则可以将内容加载到StringBuilder
或StringWriter
,并将它们存储在由文件名索引的Dictionary
中。
如果文件很大,可以这样做,但您可能需要考虑在处理临时文件时将StringWriter
的内容保存为临时文件,并根据需要从临时文件重新加载。
如果文件很大,您只能从文件中读取部分或页面,并以与小文件相同的方式管理这些文件,但磁盘上每个文件都会有很多文件,因此您可能会将它们存储在List
或类似的地方。
总是有“复制到临时文件编辑然后复制回来”的方法。简单,容易和有效,即使它使用磁盘很多。
我不确定我是否明白单身人士在这种情况下会给你什么,除了确保你没有多个字符串的副本。它没有帮助修改字符串本身。
我读到你的问题的方式是对内存中字符串的操纵(不写回文件)是至关重要的。基于此,有两个主要选项,StringBuilder和MemoryStream。
StringBuilder是专门设计用来让你有效地修改或附加到表示为字符串的数据。如果该文件不太大以至于无法放入内存,则StringBuilder是最佳选择。
您只需将文件的内容传递给StringBuilder构造函数即可。然后利用Append(),Insert(),Remove(),Replace()或索引器[]等方法根据需要修改字符串数据。 Stringbuilder确保这些操作比标准字符串上的操作更有效。
您也可以将文件加载到MemoryStream,然后使用StringReader(或StringWriter)获取类似于接口(Read(),Peek(),ReadLine()等的Stream)操作字符串。
这比StringBuilder的工作多一点,但如果Stream风格的方法更适合您的应用程序,可能会优先考虑。
- 1. C#Web API - 在内存中高速缓存中存储并保留数据
- 2. 确定将数据存储在内存或数据库中
- 3. 将数据存储在文件中(C++)
- 4. 从Bloomberg API存储JSON数据并将其存储在MongoDB中
- 5. 将个人数据存储在内部存储器中
- 6. 在内存中存储数据
- 7. 在内存中存储敏感数据
- 8. 将数据保存到内部存储
- 9. 如何在Ruby on Rails中将数据存储在内存中
- 10. 在类中存储内存内容 - C++
- 11. 在内部存储数据C#
- 12. 在C++中将数据写入内存
- 13. 将数据存储在内存中的Spark中
- 14. 将数据存储在内存中而不是在SD卡上?
- 15. C#检索数据并将其存储在列表中
- 16. C如何在内存中存储不同的数据类型?
- 17. 存储数据和访问并在C++中执行后从内存更新
- 18. 将数据存储在数据库中并在datagridview中检索
- 19. 将临时数据存储在DataGridView C#
- 20. 将数据存储在Objective-C上
- 21. 如何将数据存储在临时内存中
- 22. mov eax如何将数据存储在内存中?
- 23. 如何使用PHP将数据存储在RAM内存中?
- 24. 如何将长数据类型存储在内存中?
- 25. 如何将数据字典/表存储在内存中?
- 26. 如何将数据存储在内存中
- 27. Node.js,将对象存储在内存或数据库中?
- 28. 将大量的数据存储在内存中
- 29. 将数据存储在数据库中
- 30. 在内存上存储数据库
除非你有更具体的问题,你可能正在寻找单身模式。 – 2010-01-29 20:39:03
定义“我的代码的各个部分”。以不同的形式,从一个类库中的不同地方调用,?? – 2010-01-29 20:51:50