Я использую Visual C# .NET и создаю приложение, которое использует winforms. Мне необходимо открыть несколько файлов в виде строк и манипулировать данными в разных местах, не сохраняя информацию обратно в файл. Как мне хранить данные, чтобы я мог использовать их в разных частях моего кода?C# и хранение данных в памяти
ответ
Почему их открывают «как строки»? Строки в .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-полосные связываниям, в зависимости от того, ваша модель также предоставляет уведомления об изменениях)
Марк, мне нравится это предложение, но я обеспокоен тем, что данные не могут быть обоснованно проанализированы в предсказуемых/используемых свойствах. Тем не менее, не будет ли объектная модель требовать от меня использовать строку в качестве свойств, чтобы хранить данные в памяти? – Brandon
Аналогичным образом, есть ли у вас ссылки, которые объясняют реализацию такого рода? Я не программист на C# по профессии, но мне нужно использовать его для этого проекта на рабочем месте. – Brandon
@Brandon Номер 4294967295 может быть сохранен как A) 'string', который использует 10 байтов или B)' UInt32', который использует 4 байта. 4 <10;) – dss539
Создайте синглтон, который содержит файловые строки как общедоступные свойства, и сделайте одноэлемент открытым.
Это будет работать (по крайней мере, до тех пор, пока у вас не будет несколько потоков), но чрезмерное использование синглтонов обычно является признаком проблем дизайна на дороге ... –
Убедитесь, что вы создаете синглтон, а не * S * ingleton. http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/ – dss539
Есть ли причина думать, что синглтоны злоупотребляют? Размышление о том, что может вызвать проблему в приложении, контекст, о котором мы ничего не знаем, кажется довольно показательным. –
я бы, вероятно, использовать статический класс, если нет других требований, вы не упоминалась.
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
}
}
Это будет сложно провести тестирование. Пожалуйста, не делай этого. Подумайте о детях! – dss539
Я не вижу, как вызвать LoadData(), а затем делать утверждения, основанные на свойствах статического класса. Он будет таким же тестируемым, как и любой другой вариант, который не предполагает создания отдельного класса DataModel, который был бы лучшим решением, но не отвечает на вопрос OP, он просто предоставляет другой подход. – Nate
Существует несколько подходов, которые вы могли бы предпринять.
Если файлы являются малыми и средними, вы можете загрузить содержимое в StringBuilder
или StringWriter
и сохранить их в файле Dictionary
с индексом по имени файла.
Если файлы большие, вы можете это сделать, но вам может потребоваться сохранить содержимое файла StringWriter
во временный файл при работе с ними и перезагрузить его из временного файла.
Если файлы огромны, вы можете читать только части или страницы из файла и управлять ими так же, как небольшие файлы, за исключением того, что на каждом отдельном файле на диске должно быть много, и поэтому вы могут хранить их в List
или аналогичных.
Существует также метод «копирование в темп-файл-редактирование, а затем копирование-назад». Простой, легкий и эффективный, даже если он много использует диск.
Я не уверен, что я понимаю, что Синглтон дает вам в этой ситуации, кроме того, что вы не имеете нескольких копий строк, висящих вокруг. Он ничего не помогает, чтобы изменить сами строки.
Способ, которым я читаю ваш вопрос, состоит в том, что манипуляция строками в памяти (без записи в файл) имеет решающее значение. На основе этого есть два основных варианта: StringBuilder и MemoryStream.
StringBuilder специально разработан для эффективного использования изменить или добавить к данным, представленным в виде строки. Если файл не слишком велик, чтобы он поместился в память, StringBuilder - лучший выбор.
Вы просто передаете содержимое файла конструктору StringBuilder. Затем используйте такие методы, как Append(), Insert(), Remove(), Replace() или indexer [], чтобы изменить строковые данные по мере необходимости. Stringbuilder гарантирует, что эти операции намного эффективнее, чем выполнение стандартной строки.
Вы также можете загрузить файл в MemoryStream, а затем использовать StringReader (или StringWriter), чтобы получить интерфейс Stream (Read(), Peek(), ReadLine() и т. Д.) Для управления строкой.
Это немного больше работы, чем StringBuilder, но может быть предпочтительнее, если подход стиля Stream лучше подходит для вашего приложения.
- 1. Хранение данных в памяти - Javascript
- 2. Хранение конфиденциальных данных в памяти
- 3. Хранение союза в памяти
- 4. Хранение MySQL в памяти
- 5. Хранение переменных в памяти
- 6. Хранение данных в искры в памяти
- 7. Хранение данных JSON в памяти браузера
- 8. Получение и хранение данных в C++
- 9. Хранение хеша в памяти
- 10. Хранение файлов в памяти
- 11. Хранение больших карт в памяти
- 12. Хранение данных приложения iphone на низкой памяти
- 13. Хранение небольших данных в указателе в C?
- 14. Хранение в памяти массива javascript
- 15. Хранение памяти для переноса стека матрицы, C++
- 16. Хранение указателя в C
- 17. браузер карта памяти хранение и реализация
- 18. Хранение и чтение данных в android?
- 19. Хранение данных в QSharedMemory
- 20. Хранение и чтение JSON из внутренней памяти
- 21. Хранение памяти/распределение памяти: почему это работает и как?
- 22. Хранение ссылок в памяти стека
- 23. Хранение данных Char массива C
- 24. Хранение данных и файлов
- 25. Хранение и получение данных
- 26. Хранение данных JSON в мобильной кэш-памяти в Android
- 27. Хранение памяти кэша
- 28. Хранение адреса переменной в памяти
- 29. Хранение данных в AppState и сеансе
- 30. Хранение данных в памяти в приложении для Android
Если у вас нет более конкретного вопроса, вы, вероятно, ищете одноэлементный шаблон. –
Определите «различные части моего кода». В разных формах, называемых из разных мест в библиотеке классов,? –