2010-01-15 3 views
1

И если да, то есть пример в vb .net? Я хочу добавить результат linq в кэш, а затем разрешить mvc-сообщению искать кеш для лучшей производительности ... всякий раз, когда я его реализую, я получаю объект, не связанный с ошибкой ...Может ли таблица linq быть добавлена ​​в asp .net cache?

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

Спасибо за любую помощь ...

ответ

2

Да. Используйте Cache.Insert. Я не знаю VB.NET, но here's some basic advice (см. «Кэширование API, использование объекта кэша»). Просто передайте результат Linq в Insert. Я просто буду осторожен в том, чтобы не форматировать результат Linq с анонимными типами, что сделало бы невозможным правильное отображение объекта при извлечении его из кеша.

+0

Спасибо за быстрый ответ .... Я с использованием Cache.Insert ... результат LINQ Dim г = С г В db.batches _ Где d.bDate> «09/30/2009 12:00:00 PM "_ Выбрать d Dim c As Cache c = Новый кэш c.Вставка ("партии", г) «этот бит кода происходит от MSDN Dim сСт Как Новый объект CS = с ("партии") не Если сотовая станция Ничего Тогда c.Insert ("партии", г) Конец Если Спасибо ... Но каждый раз, когда я запускаю его, я получаю объект, не связанный с ошибкой – wali

+0

Вы не хотите создавать новый объект 'Cache'. Каждый созданный вами экземпляр кэша отделен от остальных. Используйте экземпляр кеша singleton. В ASP.NET (WebForms) он отображается в классе 'Page' как' Page.Cache'. В ASP.NET MVC он доступен в 'Controller' через' Controller.HttpContext.Cache'. –

3

Хранение LINQ запрос, вероятно, не очень полезен и, вероятно, не будет работать.

Однако, вы можете относительно безопасно хранить результаты запроса LINQ в кеше ASP.NET.

«Результаты» Я имею в виду, что вы берете объект запроса и вызываете ToList(), что приведет к выполнению запроса.

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

1

Во-первых, не вставляйте сам запрос в Cache (оператор «from»). Вместо этого вставьте результаты запроса.

Далее, имейте в виду, что только потому, что вы вставляете объект в Cache, он не гарантирует, что он будет в следующий раз при попытке получить к нему доступ. Фактически, с приоритетом по умолчанию, объект Cache имеет довольно агрессивную политику разрешения объектов.

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

0

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

В любом случае я нашел статью из учебников MVC под названием «Improving Performance with Output Caching». В tut есть несколько примеров, в которых я использовал OutputCache (Duration: = Integer.MaxValue, VaryByParam: = "none") ...

Не уверен, что это помогает или нет, но в Firebug. 50 мс против более 100 мс. Единственная проблема сейчас в том, чтобы разбить файлы вверх, потому что после примерно 500 записей браузер дерьмо ...

Спасибо за помощь всем, как обычно!

Смежные вопросы