ASP.NET Cache - обратный вызов или обновление - как решить? - PullRequest
1 голос
/ 17 января 2010

Повышает ли колбэк нагрузку на сервер с точки зрения процессора, поскольку он должен постоянно следить за изменениями?

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

Когда обновляется кеш, при обновлении кеша вызываемая страница будет загружаться дольше, обратный вызов может быть менее заметным?

Для обновления, это может не произойти какое-то время, пока страница не будет нажата, так что, возможно, есть устаревшие данные? Попадание на страницу, изменение данных сразу после.

Мысли? Выше я написал, что кеширование данных из базы данных выполняется.

Ответы [ 4 ]

3 голосов
/ 17 января 2010

Если при обратном вызове ASP.Net Cache вы ссылаетесь на SqlCacheDependency , то обратитесь к этой статье Таинственное уведомление , чтобы понять, как работает обратный вызов. Эту ссылку необходимо прочитать, если вы хотите правильно оценить стоимость обратного вызова. С доставкой уведомления связаны не только затраты (отправка, доставка, получение - все базы данных записи ), но и стоимость, связанная с простой настройкой уведомления, которая влияет на каждый оператор update / insert / delete, который касается кэшированной таблицы. Снова, прочитайте связанную статью для деталей. Как обратный вызов сравнивается с обновлением? Когда в изображение добавлена ​​корректность, обратный вызов будет вращаться вокруг вашего пользовательского обновления в любой день или ночь ...

Настоящий вопрос - это никогда не обратный вызов или обновление. Если вы можете выполнять обратные вызовы, используйте обратные вызовы, так как они всегда будут более эффективными и намного менее подвержены ошибкам, чем обновление. Реальный вопрос заключается в том, чтобы кэшировать или не кэшировать.

1 голос
/ 17 января 2010

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

1 голос
/ 17 января 2010

Обратный вызов не приведет к значительным затратам ресурсов, пока не истек срок действия данных (ASP.NET не проверяет каждый миллилитр, должен ли он вызывать ваш обратный вызов). Это, однако, приведет к тому, что данные всегда будут присутствовать в вашем кэше (при условии, что вы используете обратный вызов для обновления), даже если вам нужен этот конкретный фрагмент только один раз.

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

1 голос
/ 17 января 2010

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

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

Кэш может стоить дороже, если вы не создали хороший механизм кэширования.

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