Часто в приложениях ASP.NET можно встретить код, подобный следующему:
{
string name = ((SomeClass) Cache["SomeData"]).Name;
//.....
}
Опытный программист, даже если он не страдает паранойей, сразу видит возможную проблему — NullReferenceException. Все дело в механизме работы кэша в ASP.NET. В идеальном случае объект, помещенный в кэш, будет храниться там до перезагрузки приложения, но на практике он может быть удален между двумя обращениями: во время сборки мусора, если закончилась память (поскольку кэш использует слабые ссылки WeakReference); другим потоком, когда нужно перегрузить данные.
Соответственно приведенный код будет работать в 99% случаев, но периодически в логах будут появляться ошибки, которые практически невозможно повторить. Вот правильное использование кэша:
if (someClass != null)
{
string name = someClass.Name;
//.....
}
Не теряйте бдительности, они только этого и ждут! (о багах)
Русский
English
спасибо…частенько встречался с подобным багом и руки опускались из-за неопытности
я если честно не понял почему в первом случае может появиться NullReferenceException, ведь там проверка на null есть? и почему тогда не появится во втором.