iamserge
@iamserge

C# — как выбрать хранилище данных в памяти?

Было дело, нужда заставила обратиться к СУБД, но я избежал этого довольно просто. Удалось разделить данные на фрагменты по 1 - 20Мб, так чтобы запросы не захватывали более одного такого файла. То есть удалось без ущерба всякого все разделить, от чего я смог отказаться от СУБД в принципе, вернулся к XML и все здорово ...

Но все таки проблема меня настигла, стало нужно хранить данные в "массиве". Я так пишу, потому что лет 15 использовал их на PHP и горя не знал. Просто потому что не было ничего толком, так и вопрос не стоял. Однако, ничего не вечно под луной ... Поэтому теперь на C# нужно сделать подобное:


<?php

$E = array(
array(double, DateTime, double, string, int),
array(double, DateTime, double, string, int),
array(double, DateTime, double, string, int),
array(double, DateTime, double, string, int),
array(double, DateTime, double, string, int)
}
?>


Я намерено указал вместо примера типы данных, чтобы было яснее и уже не привязываться к PHP. В целом подсказок по теме много, разных опытов. Сейчас попробовал просто словари. Но появилась проблема с ключами, оказалось я ничего выбрать в качестве ключа не могу, DateTime иногда совпадает. Но это было скорее временное решение ...

Так что вот такой вот вопрос, как же быть с данными? При этом на данный момент все хранится в XML, он как основной формат, с которого я хочу отправить все в память и эксплуатировать. Может быть стоит иначе хранить ... Может это даст свои преимущества, я уж думал бинарно их хранить "научиться" (в смысле не хранил никогда, но заметил что так часто делают разработчики, особенно игр, когда данных архимного и все упаковывают в десяток два файлов).

Но пока решения не видится, почитываю про все понемногу, но на поверхности решения не видать, да и я не знаю ... Как разрешить задачку? И тут самое важное замечание, мне очень много нужно операций делать с этими данными: считать, сравнивать, сверять и т.п. ... То есть все судя по всему будет одним циклом, но "деятельности" будет много, от чего мучительный вопрос и повис...

Microsoft, к примеру, не многословен:

Represents a collection of keys and values.


Вот мол нате, а далее смотрите как оно там ... И как же оно там то?
  • Вопрос задан
  • 533 просмотра
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
По сути, требуется список элементов определенной структуры.
List<MyStruct>
Но если нужна персистентность данных, то по-моему лучшим решением будет таки СУБД типа SQLite. Оно будет и экономичнее в потреблении памяти и более масштабируемо.
Ответ написан
@Sumor
Всё зависит от того, что необходимо.
Если необходимо просто проводить последовательную обработку, то нужен IEnumerable.
Если нужно знать заранее количество элементов, то нужен ICollection.
Если нужна работа доступ по индексам элементов, то нужен IList.
Если нужна работа по ключам, то нужен IDictionary.
Если нужно связывание/отработка изменений элементов, то нужны IBindingList или IObservableCollection.
Это базовые возможности, которые будет наследовать любой класс для хранения элементов. Дальше если важен способ хранения элементов или особенный доступ - выбираете или реализуете класс с нужными интерфейсами и возможностями.
Базовые классы: массив, List<T>
Queue<T> - очередь
Stack<T> - стек
Dictionary<TK,TV> - словарь
ObservableCollection<T> - коллекция с поддержкой событий изменения
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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