C# и хранящие данные в памяти

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

5
задан Brandon 29 January 2010 в 20:33
поделиться

5 ответов

Почему открыть их «как строки»? Строки в .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-стороннюю или двустороннюю привязку, в зависимости от того, обеспечивает ли ваша модель изменений)

0
ответ дан 15 December 2019 в 06:26
поделиться

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

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

3
ответ дан 15 December 2019 в 06:26
поделиться

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

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

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

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

Вы также можете загрузить файл в Memoreream , а затем используйте StringReader (или StringWriter), чтобы получить поток, например интерфейс (READ (), PEEK (), READLILE ( ) и т. Д.) Для манипулирования строкой.

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

0
ответ дан 15 December 2019 в 06:26
поделиться

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

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
    }
}
0
ответ дан 15 December 2019 в 06:26
поделиться

http://gcc.gnu.org/wiki/Visibility

Это полное руководство по экспорту в msvc и gcc.

-121--1238896-

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

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
    }
}
-121--5086278-

Существует ряд возможных подходов.

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

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

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

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

0
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: