Правильное использование кэша в ASP.NET

Jan 12
2008 21:22 (ASP.NET, Программирование) · English (4,935 views)

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

if (Cache["SomeData"] != null)
{
    string name = ((SomeClass) Cache["SomeData"]).Name;
    //.....
}

Опытный программист, даже если он не страдает паранойей, сразу видит возможную проблему — NullReferenceException. Все дело в механизме работы кэша в ASP.NET. В идеальном случае объект, помещенный в кэш, будет храниться там до перезагрузки приложения, но на практике он может быть удален между двумя обращениями: во время сборки мусора, если закончилась память (поскольку кэш использует слабые ссылки WeakReference); другим потоком, когда нужно перегрузить данные.

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

SomeClass someClass = Cache["SomeData"] as SomeClass;
if (someClass != null)
{
    string name = someClass.Name;
    //.....
}

Не теряйте бдительности, они только этого и ждут! (о багах)

Правильная обработка заголовка Last-Modified

Apr 10
2006 22:54 (Программирование, PHP) · English (23,101 views)

Это короткая заметка о заголовке Last-Modified. Представьте следующую ситуацию: у Вас есть изображение, которое хранится в базе данных, и Вам нужно отправить это изображение браузеру в ответ на некоторый запрос. Но извлечение изображения из базы данных занимает некоторое время, а если этих изображений несколько - производительность Вашего Веб-сервера начинает стремительно падать. В этом случае Вам необходимо реализовать некоторую функциональность для кэширования в приложении. Все изображения могут изменяться, потому необходимо иметь возможность проверять дату изменения (например, хранить ее в той же базе данных).

Читать дальше »

Почему IE сохраняет изображения из Web в формате BMP?

Jan 18
2006 14:46 (Программирование, PHP) · English (9,748 views)

Сегодня я нашел очень неприятную ошибку в Internet Explorer. Я создал изображение GIF с помощью PHP GD2 и отдал результат клиентскому браузеру. Затем я попытался сохранить изображение на локальном диске, но IE предложил только формат .BMP вместо исходного .GIF! Подобная проблема описана в Базе знаний Microsoft, но эта статья не помогла.

Читать дальше »

 
Copyright © 2005 - 2008, Dmytro Shteflyuk