Asp.net - Кэширование против статической переменной для хранения словаря - PullRequest
16 голосов
/ 20 августа 2009

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

Мы используем перезапись URL, поэтому почти каждый запрос в магазине генерирует поиск. Нам также нужно часто перебирать данные, чтобы создавать меню для основного магазина и страниц отделов.

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

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

Мой импульс заключается в том, чтобы поместить словарь в статическую переменную в одном из связанных классов. Однако я хотел бы получить некоторые входные данные по этому вопросу. Правильно ли я думаю, что этот метод будет быстрее? Это ужасная практика? Есть ли лучший способ, по которому я скучаю?

Кажется, я не могу найти много информации по этому поводу, и я очень признателен за любую информацию, которой вы можете поделиться. Спасибо!

Ответы [ 4 ]

20 голосов
/ 20 августа 2009

Коллекции Application и Cache не сериализуют объекты, которые вы передаете в них, они хранят фактическую ссылку. Извлечение объекта из Cache не будет дорогой операцией, независимо от размера объекта. Всегда придерживайтесь объектов Cache, если у вас нет веских причин не делать этого, это просто хорошая практика.

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

4 голосов
/ 20 августа 2009

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

Итак, мой ответ - используйте кеш и посмотрите, как он работает.

3 голосов
/ 20 августа 2009

memcached твой друг! (но может быть излишним, если вы не масштабируете)

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

0 голосов
/ 25 апреля 2018

ИМХО, вообще говоря, если у вас есть контроль над обновлениями базового объекта, вы должны использовать статическое хранилище. В противном случае, если вы зависите от стороннего API для извлечения данных, используйте технологию кэширования.

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