Что быстрее при решении, DataSet.Tables или Dictionary <строка, таблицы> - PullRequest
2 голосов
/ 10 декабря 2008

Я создаю фиктивную базу данных для тестов импорта-экспорта (алгоритма чтения и записи сложных структур данных в нашу базу данных, а не только для проверки операций ввода-вывода) и пытаюсь решить, использовать ли DataSet для хранения фиктивных таблиц (по имени таблицы) в базе данных faux или в словаре ()

С точки зрения получения данных по имени, можно ли ожидать большей производительности от dataset.Tables ["TableName"] или словаря <"TableName"> (из Dictionary ()?

Ответы [ 2 ]

7 голосов
/ 10 декабря 2008

На самом деле, Dictionary<,> часто медленнее , чем линейный поиск, из-за сложностей, связанных с выполнением словарной логики (хэши, сегменты и т. Д.). В моих тестах обрезание (где Dictionary<,> начинает работать быстрее) часто составляет около 150 элементов. И так как у вас обычно меньше таблиц, чем 150, я был бы рад линейному списку производительности.

(что вовсе не означает "не использовать Dictionary<T>; это просто означает, что производительность может не быть главной причиной для этого конкретного варианта использования; применение уникального ключа и foo ["bar"] модель может быть)

Частично это связано со сложностью получения хеша - GetHashCode() для string, в частности, является относительно дорогим (хотя int.GetHashCode() ослепительно быстр ;-p).

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

Другие различия между Dictionary<,> и чем-то вроде List<> заключаются в уникальности: Dictionary<,> не позволит вам иметь дублирующиеся ключи (хотя Lookup<,> в .NET 3.5 будет).

4 голосов
/ 10 декабря 2008

DataSet.Tables внутренне реализован с использованием ArrayList. Поиск таблицы по имени включает в себя линейный поиск по таблицам в списке и много кастинга. Таким образом, использование словаря, основанного на хэше и универсального, почти наверняка будет быстрее. (Хотя вам понадобится много таблиц и / или много обращений, чтобы это имело большое значение.)

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