Стоит ли кэшировать словарь для значений внешних ключей в ASP.net? - PullRequest
3 голосов
/ 10 апреля 2010

У меня есть Dictionary<int, string> кэшированный (на 20 минут), который содержит ~ 120 пар ID / Имя для справочной таблицы. Я перебираю эту коллекцию при заполнении раскрывающихся списков и уверен, что это быстрее, чем каждый раз запрашивать у БД полный список.

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

Скажите, что эта кэшированная справочная таблица является таблицей EmployeeType. Если бы мне пришлось запрашивать и отображать список имен и типов сотрудников, я должен запросить EmployeeName и EmployeeTypeID и использовать свой кэшированный словарь, чтобы получить имя EmployeeTypeIDs при отображении каждой записи, или это быстрее, если БД захватывает EmployeeName и JOIN чтобы получить строку EmployeeType, минуя кэшированный словарь.

Я знаю, что оба будут работать, но мне интересно, что будет работать быстрее всего. Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2010

Оптимизация 101 говорит, что не делайте этого, если вам не нужно: - Советы по оптимизации программ на C # /. NET

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

Что касается 2-й части, то вы можете также позволить соединению базы данных выполнить ее, возможно, эта таблица уже будет в ОЗУ, а увеличенная нагрузка на сеть будет небольшой.

Но опять же, если вам не нужно это делать, не делайте этого! Опасность здесь в том, что вы делаете это одно, потом другое, потом другое, код становится все более сложным, а оперативная память заполняется вещами, которые, по вашему мнению, могут вам понадобиться, но которые фактически используются редко, оставляя меньше места для OS / ORM / DB делать свою работу. Пусть компилятор, ORM и база данных решат, что вместо этого оставить в памяти - у них гораздо большая команда, сосредоточенная на оптимизации!

2 голосов
/ 10 апреля 2010

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

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

Единственный способ, опять же, это сделать это самым простым способом (без кэширования), и если вы не довольны только тогда, вы пойдете на все.

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