اگر به برنامه هاي تحت وبي که با ASP.NET نوشته شده اند دقت کنيد، متوجه خواهيد شد که در اغلب آنها، جهت بازيابي یک شي از Cache به شکل زير استفاده شده است :
if (Cache["SomeData"] != null)
{
string name = ((SomeClass)Cache["SomeData"]).Name;
//.....
}
|
اگر به قطعه کد بالا با دقت نگاه کنيد، متوجه مطلبي خواهيد شد.
اين احتمال وجود دارد که پس از اينکه توسط if، چک شد که شي Cache شده null نباشد و قبل از اينکه بازيابي اطلاعات صورت گيرد، Cache بر اثر حادثه اي خالي شود و در اين صورت هنگام بازيابي اطلاعات با خطاي NullReferenceException روبرو خواهيد شد.
هر چند که اين احتمال بسيار بسيار ناچيز است ولي در طراحي سيستم هايي با ترافيک بسيار بالا و يا داراي حساسيت هاي امنيتي، در نظر گرفتن اين احتمال مي تواند قابل توجه باشد.
قطعه کد بالا بهتر است به شکل زير نوشته شود.
SomeClass someClass = Cache["SomeData"] as SomeClass;
if (someClass != null)
{
string name = someClass.Name;
//.....
}
|
علاوه بر اينکه مشکل ذکر شده در بالا حل شد، اين روش مزيت ديگري هم دارد.
مشاهده مي شود که در اين قطعه کد فقط يکبار بازيابي اطلاعات از Cache صورت گرفت در حالي که در قطعه کد اول اين عمل 2 مرتبه انجام شد.
موفق باشيد