ASP.NET и выходной кэш - как узнать, работает ли он? - PullRequest
3 голосов
/ 04 октября 2009

Проблема : У меня есть веб-сайт ASP.NET, и я не верю, что мой код правильно получает OutputCached. Я использую счетчики производительности IIS7, чтобы показать мне попадания или промахи в секунду.


У меня простой веб-сайт ASP.NET MVC. Я использую встроенную магию ASP.NET Output Cache.

Вот пример кода: -

[AcceptVerbs(HttpVerbs.Get)]
[ApiAuthorize]  // <-- this checks the querystring for a "key=1234". 
                // Doesn't find it, then it throws a 401 NOT AUTH exception.
[OutputCache(CacheProfile = "HomeController_Foo")]
public ActionResult Foo(string name, byte? alpha, byte? beta)
{
}

, значит, каждый URL-запрос может выглядеть следующим образом: -

Теперь, обратите внимание, как у меня есть OutputCache, ссылающийся на файл конфигурации? вот оно ...

<caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="HomeController_Foo" duration="3600" varyByParam="key;name;alpha;beta"/>
        </outputCacheProfiles>
    </outputCacheSettings>
</caching>

Ничего сложного ...

так вот кикер! Когда я подтверждаю, что это происходит с помощью счетчиков производительности IIS7, он говорит, что число пропущенных кэшей в секунду составляет 100% запросов, которые я делаю в секунду. Хиты выходного кэша равны 0 / сек.

Я использую стороннюю программу нагрузочного тестирования для загрузки моего сайта с запросами. Теперь, каковы исходные данные? список имен. Программа повторяет все имена, затем возвращается к началу, повтор полоскания. Так что ОБЯЗАТЕЛЬНО вызывать одну и ту же строку запроса хотя бы один раз. Файлы журнала IIS подтверждают это.

Я не передаю никаких данных для альфы или беты.

это моя строка запроса, которую я нажимаю ....

... где я продолжаю подставлять 'hello + world' именами из файла источника данных, и журналы IIS подтверждают это.

Итак ... я смотрю на неправильный счетчик производительности? Есть ли какие-то другие хитрости, чтобы увидеть, если он кешируется? Код очень быстрый, поэтому трудно сказать, является ли это кэшированным результатом или нет.

Ответы [ 2 ]

7 голосов
/ 24 марта 2012

Возможно, слишком поздно, но чтобы помогать другим: если у вас есть cookie в заголовке ответа, это предотвратит его кэширование. Модуль outputcache (http) имеет множество автоматических проверок, чтобы гарантировать, что ответ подвергается кешированию. Просмотр этого через размышление может дать любому кандидату неумение поместить в кеш.

1 голос
/ 04 октября 2009

Используйте такой инструмент, как firebug и посмотрите ответ на запрос. К 200 или 304 вы сможете определить, был ли использован ответ кэша (304) или был отправлен успешный ответ (200).

...