Asp.net - Кэширование и Статическая переменная для хранения словаря

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

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

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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