Лучшая структура данных для быстрой вставки и фильтрации - PullRequest
0 голосов
/ 29 ноября 2011

Я пишу простую утилиту для сбора журналов приложений и их отображения пользователю. Необходимо взять записи журнала из нескольких файлов и объединить их в одно внутреннее хранилище. Объединение основано на времени записи в журнале, поэтому несколько записей могут иметь одинаковое время. Обратите внимание, что размер журналов довольно мал, поэтому максимальный размер может составлять 10 файлов, каждый из которых содержит 2000 записей журнала.

Я также хочу представить это пользователю, но разрешить ему фильтровать на основе различных уровней ведения журнала (отладка, предупреждение, ошибка и т. Д.), А также фильтровать на основе файла, из которого он получен. Это звучит как очень распространенный тип проблемы для решения, и поэтому другие должны иметь опыт о наилучшем подходе. Я думал о следующем ...

1, используйте DataSet для хранения записей журнала, а затем используйте DataView для применения фильтрации, сортировки.

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

Мысли

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

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

Любой из двух должен работать хорошо. Мне удобнее с List<T>, поэтому я бы предпочел это, но могу понять привлекательность использования DataTable и т. Д.

Другим вариантом будет использование LINQ для любого внутреннего хранилища данных, которое вы выберете. Это может упростить запросы.

Я подозреваю, что List<T> или любая другая выбранная вами коллекция будет использовать меньше памяти, чем DataTable. Однако, если ваши записи журнала огромные , я не ожидаю, что использование памяти будет проблемой.

1 голос
/ 29 ноября 2011

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

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