Chabok
چهارشنبه 05 اسفند 1388, 14:37 عصر
با سلام
برای استفاده از Cache اکثراً چنین روشی را پیاده می کنند :
یک سری اطلاعات از یک منبع خوانده می شود و Cache می شود .
هنگام نیاز به این اطلاعات در صورتی که بر روی Cache موجود باشد از آن خوانده می شود .
در غیر این صورت مجدداً از منبع اصلی خوانده می شود و بر روی Cache نیز ذخیره می شود .
من برای Cache کردن یک DataTable این کار را توسط Property بصورت زیر انجام داده ام :
private static DataTable SetDT
{
set
{
if (value != null)
{
//Remove previous info from cache
if (SetDT != null) HTP.Cache.Remove("ChbSetDT");
//insert into cache
HTP.Cache.Add("ChbSetDT", value, null, DateTime.Now.AddMonths(1)
, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
}
get
{
if (HTP.Cache.Get("ChbSetDT") != null)
return (DataTable)HTP.Cache.Get("ChbSetDT");
else return null;
}
}نکته : HTP در این جا یک Property بصورت Readonly است که HttpContext.Current را برگشت می دهد .
برای مثال در یک متد دیگر که وظیفه مدیریت این شی را دارد در صورت null بودن اولیه ، آن را Fill می کند و در نتیجه توسط این Property در Cache ذخیره می شود و مشکلی هم نیست .
حال سوال من این است که اگر محتویات این DataTable را که در واقع ارجاع به Cache دارد را تغییر دهیم چه اتفاقی می افتد ؟
SetDT.Rows[0][0] = "Salam";آیا هنگام اجرای این کد ، شی موجود در Cache بصورت خودکار تغییر میکند ؟
زیرا SetDT که از نوع DataTable است شی موجود در Cache را return می کند .
آیا اگر قصد ما تغییرات در شی باشد ، نحوه نوشتن Property بالا صحیح است ؟
یا باید در صورت تغییرات ، کل شی مجدداً توسط Cache.Insert بازنویسی شود ؟
چون در حال حاضر این کد جواب می دهد.
ولی میخواستم بدونم از نظر فنی این ارجاع غیر مستقیم به چه شکلی عمل می کند ؟
با تشکر
برای استفاده از Cache اکثراً چنین روشی را پیاده می کنند :
یک سری اطلاعات از یک منبع خوانده می شود و Cache می شود .
هنگام نیاز به این اطلاعات در صورتی که بر روی Cache موجود باشد از آن خوانده می شود .
در غیر این صورت مجدداً از منبع اصلی خوانده می شود و بر روی Cache نیز ذخیره می شود .
من برای Cache کردن یک DataTable این کار را توسط Property بصورت زیر انجام داده ام :
private static DataTable SetDT
{
set
{
if (value != null)
{
//Remove previous info from cache
if (SetDT != null) HTP.Cache.Remove("ChbSetDT");
//insert into cache
HTP.Cache.Add("ChbSetDT", value, null, DateTime.Now.AddMonths(1)
, Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
}
get
{
if (HTP.Cache.Get("ChbSetDT") != null)
return (DataTable)HTP.Cache.Get("ChbSetDT");
else return null;
}
}نکته : HTP در این جا یک Property بصورت Readonly است که HttpContext.Current را برگشت می دهد .
برای مثال در یک متد دیگر که وظیفه مدیریت این شی را دارد در صورت null بودن اولیه ، آن را Fill می کند و در نتیجه توسط این Property در Cache ذخیره می شود و مشکلی هم نیست .
حال سوال من این است که اگر محتویات این DataTable را که در واقع ارجاع به Cache دارد را تغییر دهیم چه اتفاقی می افتد ؟
SetDT.Rows[0][0] = "Salam";آیا هنگام اجرای این کد ، شی موجود در Cache بصورت خودکار تغییر میکند ؟
زیرا SetDT که از نوع DataTable است شی موجود در Cache را return می کند .
آیا اگر قصد ما تغییرات در شی باشد ، نحوه نوشتن Property بالا صحیح است ؟
یا باید در صورت تغییرات ، کل شی مجدداً توسط Cache.Insert بازنویسی شود ؟
چون در حال حاضر این کد جواب می دهد.
ولی میخواستم بدونم از نظر فنی این ارجاع غیر مستقیم به چه شکلی عمل می کند ؟
با تشکر