C # и хранение данных в памяти - PullRequest
5 голосов
/ 29 января 2010

Я использую Visual C # .NET и создаю приложение, которое использует winforms. Мне необходимо открыть несколько файлов в виде строк и манипулировать данными в разных местах, не сохраняя информацию обратно в файл Как мне сохранить эти данные, чтобы я мог использовать их в различных частях своего кода?

Ответы [ 5 ]

3 голосов
/ 29 января 2010

Создайте синглтон, который содержит строки файлов в качестве открытых свойств, и сделайте синглтон общедоступным.

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

0 голосов
/ 30 января 2010

Я не уверен, что понимаю, что Синглтон дает вам в этой ситуации, за исключением того, что у вас нет нескольких копий струн. Это никак не поможет изменить сами строки.

То, как я читаю ваш вопрос, заключается в том, что манипулирование строками в памяти (без обратной записи в файл) является критическим. Исходя из этого, есть две основные опции, StringBuilder и MemoryStream.

StringBuilder специально разработан, чтобы позволить вам эффективно изменять или добавлять данные, представленные в виде строки. Если файл не слишком велик для его размещения в памяти, StringBuilder - лучший выбор.

Вы просто передаете содержимое файла конструктору StringBuilder. Затем используйте методы, такие как Append (), Insert (), Remove (), Replace () или indexer [], чтобы изменить строковые данные по мере необходимости. Stringbuilder гарантирует, что эти операции намного эффективнее, чем выполнение стандартной операции над стандартной строкой.

Вы также можете загрузить файл в MemoryStream и затем использовать StringReader (или StringWriter), чтобы получить интерфейс типа потока (Read (), Peek (), ReadLine ( ) и т. д.) для манипулирования строкой.

Это немного больше работы, чем StringBuilder, но может быть предпочтительнее, если подход в стиле Stream лучше подходит для вашего приложения.

0 голосов
/ 29 января 2010

Есть несколько подходов, которые вы можете предпринять.

Если файлы имеют небольшой или средний размер, вы можете загрузить содержимое в StringBuilder или StringWriter и сохранить их в Dictionary, проиндексированном по имени файла.

Если файлы большого размера, вы можете сделать это, но вам может потребоваться сохранить содержимое StringWriter во временном файле при работе с ними и перезагрузить временный файл по мере необходимости.

Если файлы огромные, вы можете читать из файла только части или страницы и управлять ими так же, как и маленькими файлами, за исключением того, что их будет много на каждый отдельный файл на диске, и поэтому вы можете сохраните их в List или аналогичном.

Также всегда существует подход «копировать в временный файл, редактировать, потом копировать». Просто, легко и эффективно, даже если он много использует диск.

0 голосов
/ 29 января 2010

Зачем открывать их "как строки"? Строки в .NET являются неизменяемыми, поэтому они могут дорого обойтись, если вы делаете много изменений. Обычный подход состоит в том, чтобы проанализировать / десериализовать данные в объектную модель и передать эту объектную модель в ваши формы - т.е.

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

или аналогичный. Тогда ваша форма может получить доступ к свойствам модели:

captionTextBox.Text = model.Title; // etc

или используйте привязку данных, если вы действительно хотите:

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

(который включает одностороннюю или двустороннюю привязку, в зависимости от того, предоставляет ли ваша модель также уведомления об изменениях)

0 голосов
/ 29 января 2010

Я бы, вероятно, использовал статический класс, если нет других требований, о которых вы не упомянули.

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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...