2009-03-10 2 views
0

У меня есть класс в моем приложении, который переводит токены маршрута в полностью определенные пути. Например: он может принимать строку типа "%MYAPPDATA%" и возвращает C:\Users\user.DOMAIN\AppData\Raoming\MyApp.Должен ли я сохранять данные приложения?

В качестве альтернативы класс имеет перегрузку для функции, которая может принимать перечисление вместо строки. Например: он может принимать перечисление AppPaths.MyAppData и возвращать C:\Users\user.DOMAIN\AppData\Raoming\MyApp.

Мне нужно хранить «таблицу поиска» где-то, но я не уверен, какой лучший метод или структура. Должен ли я использовать набор данных и записывать таблицу на диск? Или просто сохранить в памяти?

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

Мысли?

ответ

2

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

Опять же, если у вас нет, скажем, 250-500 элементов, действительно не имеет смысла использовать дисковое хранилище во время работы вашей программы: накладные расходы как в задержке (время поиска), так и в кодировании не стоит.

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

+0

я должен просто построить массив, когда объект построен тогда? –

+0

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

+0

Еще один вопрос - переводчик - это своего рода утилита, поэтому я создал его как статический класс, в котором был большой оператор case. Теперь, когда мне нужно сохранить таблицу поиска в памяти, должен ли я сделать общее состояние таблицы или сделать класс нестатическим? –

1

Все зависит от производительности, которую вы желаете.

Вы можете хранить данные в таблицах базы данных (один для «сырых» данных, два для отношений между ключами и перечислением) и искать его с помощью простых SQL-запросов. Однако это может быть не самым быстрым способом, в зависимости от базовой базы данных и механизма кэширования.

Вы также можете использовать две карты памяти (словари?) Для быстрого поиска во время выполнения, инициализируя их при запуске.

0

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

Конечно, это зависит от вашего использования. Насколько я вижу, вы хотите сохранить путь к пользовательским данным. Может быть, у вас есть User-Class, где вы можете сохранить путь к данным?

if(Directory.Exists(User.Current.AppDataPath)) 

Таким образом, вы могли бы, вероятно, избавиться от «таблицы поиска», так как каждый пользователь знает, где его AppData - просто мысль ...

Смежные вопросы