SqlCacheDependency с LINQ2SQL (шаблон репозитория)
Я использую шаблон репозитория L2S в своем веб-приложении ASP.Net 3.5. Но я не совсем доволен выступлением, которое испытал вживую. Я искал в Google и наткнулся на SQL-кэширование с использованием класса SqlCacheDependency. Но у меня нет учебника или ссылки, которая объясняет, как использовать его в моем сценарии.
Так что помогите мне, ребята... Любая помощь или руководство будут высоко оценены.
Пожалуйста, используйте некоторые примеры кодов или онлайн-ссылки....
Заранее спасибо
Обновление: мой репозиторий
public interface IRepository<T> where T : class
{
T GetById(int id);
IQueryable<T> GetAll();
void SaveOrUpdate(T entity);
void DeleteOnSubmit(T entity);
}
2 ответа
Иногда linq-to-sql делает запросы неожиданными способами. Вы проверяли, как ваши linq запросы переводятся в sql? Используйте Sql Server Profiler (доступно в меню инструментов на сервере управления SQL), чтобы проверить сгенерированные запросы. Я написал некоторую информацию об этом здесь.
Как только вы узнаете, что у вас сгенерированы хорошие запросы, вы должны посмотреть, является ли выполнение любого из них узким местом в производительности. Здесь также может помочь профилировщик. Если некоторые запросы выполняются медленно, попробуйте добавить соответствующие индексы.
Если у вас нет сайта с очень большим объемом, эти шаги должны обеспечить хорошую производительность без необходимости кэширования.
Вы не описали, как вы используете linq to sql с вашим хранилищем. По сути, вы используете один и тот же DataContext для всех репозиториев, созданных во время одного запроса, или каждый репозиторий получает свой собственный экземпляр DataContext? Если это последнее, вы теряете внутреннюю кешируемость DataContext.
Еще одна область, где производительность может быть улучшена, это если у вас есть какие-либо часто используемые запросы, которые содержат много слоев объединений (а не только один выбор таблицы). Использование CompiledQuery здесь значительно ускорит процесс. Скомпилированные запросы должны генерироваться только при первом их использовании, в противном случае запрос перекомпилируется при каждом его использовании.