آبجی
14th February 2010, 01:05 AM
تکه کد ذیل رو در نظر بگیرید: if (Cache["myCache"] != null)
{
int numRows = ((DataTable)Cache["myCache"]).Rows.Count;
//…..
}
در کد فوق دو ارجاع به Cache ایجاد شده.
در دات نت هیچ وقت تضمینی وجود نداره که با دو ارجاع به یک شی (حتی بلافاصله پشت سر هم) اون شی وجود داشته باشه.
ممکنه GC بلافاصله بعد از فراخوانی اول، Cache رو null کنه و یا اگر برای Cache مقدار absoluteExpiration تعیین کرده باشید Cache از بین بره.
در نتیجه یک فراخونی صحیح می تونه با یک ارجاع و به شکل ذیل باشه:
DataTable myDT = Cache["myCache"] as DataTable;
if (myDT != null)
{
int numRows = myDT.Rows.Count;
//…..
}
این نکته برای ارجاع به تمامی اشیا در دات نت صادق هست.
{
int numRows = ((DataTable)Cache["myCache"]).Rows.Count;
//…..
}
در کد فوق دو ارجاع به Cache ایجاد شده.
در دات نت هیچ وقت تضمینی وجود نداره که با دو ارجاع به یک شی (حتی بلافاصله پشت سر هم) اون شی وجود داشته باشه.
ممکنه GC بلافاصله بعد از فراخوانی اول، Cache رو null کنه و یا اگر برای Cache مقدار absoluteExpiration تعیین کرده باشید Cache از بین بره.
در نتیجه یک فراخونی صحیح می تونه با یک ارجاع و به شکل ذیل باشه:
DataTable myDT = Cache["myCache"] as DataTable;
if (myDT != null)
{
int numRows = myDT.Rows.Count;
//…..
}
این نکته برای ارجاع به تمامی اشیا در دات نت صادق هست.