C # HttpRuntime.Cache.Insert () Не содержит кэшированное значение

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

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

I даже у меня есть электронная почта от себя, отправляюсь в спам-ведро, потому что (1) я обычно не отправляю электронное письмо себе и (2) есть спамеры, которые подделывают мой адрес возврата в спаме, отправленном мне.

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

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

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

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

13
задан mike 24 November 2009 в 21:16
поделиться

5 ответов

Краткий ответ

Ваш пул приложений или веб-сайт закрывается слишком рано. Увеличьте тайм-аут простоя на сайте, увеличьте время жизни пула приложений для пула, в котором запущен сайт. Увеличьте выделение памяти и лимиты запросов.

Полный ответ

Если вы хотите знать, когда и почему что-то удаляется из кеша, вам необходимо зарегистрировать удаление элемента, используя параметр CacheItemRemovedCallback при вставке ... Тогда вы можете зарегистрируйте причину, используя аргумент CacheItemRemovedReason . Таким образом, вы можете зарегистрировать причину как одну из четырех перечисленных причин:

  1. Удалено Элемент удаляется из кэша вызовом метода Remove или вызовом метода Insert, в котором указан тот же ключ.
  2. Срок действия истек Элемент удален из кеша, поскольку срок его действия истек.
  3. Недостаточно используется Элемент удален из кеша, так как система удалила его, чтобы освободить память.
  4. DependencyChanged Элемент удален из кеша, поскольку связанная с ним зависимость кеша изменилась.

Обычно вы обнаружите, что Expired и Underused являются причинами для вещей, которые не имеют явных вызовов Remove, сделанных для кеша и не имеющих зависимостей.

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

Это может произойти из-за изменения файлов web.config (или каталога bin, или .aspx и т. Д.). Для получения дополнительной информации о том, когда это происходит, см. Раздел Перезапуск приложения на этой странице . Когда это происходит, текущие ожидающие обработки запросы очищаются, кеш очищается, а домен приложения выгружается. Вы можете обнаружить эту ситуацию, проверив AppDomain.IsFinalizingForUnload и зарегистрировав это во время обратного вызова.

Другая причина для повторного использования AppDomain - это когда IIS решает перезапустить AppPool по любой из причин, по которым он был настроен. Примеры: xxx память была выделена в течение всего срока службы, yyy секунд времени выполнения для AppPool, ttt запланированное время перезапуска или iiii время простоя (запросов не поступало). Дополнительные сведения см. В этой статье для IIS6 или в этой статье для IIS7

33
ответ дан 1 December 2019 в 18:06
поделиться

Объект Cache не гарантирует, что он вообще будет удерживать кешированные объекты, а тем более в течение всего времени, которое вы предлагаете.

Если вы хотите более решительно поддержать это для этого вы можете установить CacheItemPriority.High или CacheItemPriority.NotRemovable, когда вы вставляете элемент в Cache. С приоритетом по умолчанию Normal среда выполнения имеет довольно агрессивную политику отпускания объектов при увеличении нагрузки на память.

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

5
ответ дан 1 December 2019 в 18:06
поделиться

В документах http://msdn.microsoft.com/en-us/library/4y13wyk9.aspx говорится, что Cache.NoSlidingExpiration необходимо использовать при использовании абсолютного срока действия. .

HttpRuntime.Cache.Insert(CacheName, Price, null, DateTime.Now.AddDays(3), Cache.NoSlidingExpiration);

это может быть не ваша проблема, я только что обнаружил, что Cache.NoSlidingExpiration должно быть таким же, как TimeSpan.Zero.

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

также проверьте последний комментарий здесь http://bytes.com / topic / net / answers / 717129-c-asp-net-page-cache-Get-Remove-too-early похоже, кто-то нашел решение вашей проблемы.

4
ответ дан 1 December 2019 в 18:06
поделиться

Проверьте время перезапуска в пуле приложений.

1
ответ дан 1 December 2019 в 18:06
поделиться

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

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

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx

~ md5sum ~

0
ответ дан 1 December 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: