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

Jan 12
2008 21:22 (ASP.NET, Программирование) · English (4,074 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;
    //.....
}

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

Сумасшедший кусок кода: Проверка параметра запроса

Dec 17
2007 22:47 (ASP.NET, Программирование) · English (4,615 views)

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

if (Request.QueryString.HasKeys())
{
    string[] keys = Request.QueryString.AllKeys;
    foreach (string k in keys)
    {
        if (k == "memberpagemode" && (string)Request.QueryString.GetValues(k).GetValue(0) == "edit")
        {
            pSett.ChangeFormViewMode(FormViewMode.Edit);
        }
    }
}

А как вы ищете в хэше ключ с определенным значением?

Что за хрень? Разработчики клиентских библиотек Facebook для ASP.NET глупы?

Sep 18
2007 17:49 (ASP.NET, Программирование, Facebook) · English (7,120 views)

На прошлой неделе я столкнулся со странным багом в Facebook Developer Toolkit. При попытке вызвать метод setFBML (я рассказывал о нем в моей предыдущей заметке), я поймал исключение о неправильной подписи (invalid signature). “Ха-ха”,– сказал я и скачал исходники библиотеки. Немного подебажив, я нашел несколько строк, которые просто убили меня:

// Compute the MD5 hash of the signature builder
hash = md5.ComputeHash(Encoding.Default.GetBytes(
                           signatureBuilder.ToString().Trim()));

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

Генерируем данные для метода setFBML в Facebook из ASP.NET

Sep 14
2007 00:43 (ASP.NET, Программирование, Facebook) · English (17,565 views)

В моем текущем проекте мы решили разработать приложение Facebook. Это действительно мощная платформа с кучей интересных идей, что обычно означает необходимость потратить кучу времени на то, чтобы заставить приложение работать как задумано. Сегодня я хочу поговорить о профилях пользователей. Любое приложение Facebook может добавить несколько ссылок, которые будут отображаться под картинкой пользователя, и контент для отображения в широкой или узкой колонке. Естественно, вы можете использовать синтаксис FBML, особенно множество тегов fb:if-… для выбора, какой контент показывать на определенных профилях конкретным пользователям.

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

Синхронный вызов методов страницы в библиотеке ASP.NET AJAX

Sep 10
2007 23:15 (ASP.NET, Программирование, JavaScript) · English (11,866 views)

Иногда нам нужно выполнять такие задачи, которые разработчики библиотек даже не представляли. Один из таких случаев — выполнение синхронного AJAX-вызова (Asynchronous JavaScript And XML — Асинхронный JavaScript и XML). Ниже вы найдете простое решение.

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

 
Copyright © 2005 - 2008, Dmytro Shteflyuk