مثال: جهت تشریح data caching به ایجاد یک وب سایت آزمایشی می پردازیم. ابتدا یک وب سایت جدید ایجاد کرده، سپس یک web form به آن اضافه کنید. همچنین یک کنترل SqlDataSource که دارای اتصال به پایگاه داده باشد، اضافه کنید. حال یک label به صفحه اضافه کنید که در آن response time صفحه نمایش داده می شود. کد: < %@ OutputCache Duration="60" VaryByParam="txtname" % > یک event handler به رخداد page load اضافه کنید: کد: protected void Page_Load(object sender, EventArgs e) { lbltime.Text = String.Format("Page posted at: {0}",DateTime.Now.ToLongTimeString()); } نتیجه:
Object Caching Object caching در مقایسه با دیگر تکنیک های ذخیره سازی موقت داده، انعطاف پذیری بیشتری را فراهم می کند. می توان با بهره گیری از تکنیک object caching هر شئی را داخل حافظه ی نهان قرار داد. شئ می تواند از هر نوعی باشد – یک نوع داده (data type)، یک کنترل وب (web control)، یک کلاس، یک dataset object و غیره .. . آیتم مورد نظر را می توان تنها با تخصیص اسم کلید (key name)، به حافظه ی نهان اضافه کنید: کد: Cache["key"] = item;
ASP.NET برای درج یک شئ به داخل cache متد Insert() را ارئه داده است. ان تابع دارای چهار نسخه ی overload شده است که زیر مشاهده می کنید:
Sliding expiration را زمانی بکار می بریم که می خواهیم آیتمی را که طی مدت زمان مشخصی مورد استفاده قرار نگرفته از حافظه ی نهان یا cache حذف کنیم. تکه کد زیر آیتمی را که Sliding expiration آن 10 دقیقه تنظیم شده و هیچ dependency ای ندارد ذخیره می کند. کد: Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
یک صفحه ایجاد کنید که فقط دارای یک کنترل label و button باشد. اکنون کد زیر را در رخداد page load وارد کنید: کد: protected void Page_Load(object sender, EventArgs e) { if (this.IsPostBack) { lblinfo.Text += "Page Posted Back.< br/ >"; } else { lblinfo.Text += "page Created.< br/ >"; } if (Cache["testitem"] == null) { lblinfo.Text += "Creating test item.< br/ >"; DateTime testItem = DateTime.Now; lblinfo.Text += "Storing test item in cache "; lblinfo.Text += "for 30 seconds.< br/ >"; Cache.Insert("testitem", testItem, null, DateTime.Now.AddSeconds(30), TimeSpan.Zero); } else { lblinfo.Text += "Retrieving test item.< br/ >"; DateTime testItem = (DateTime)Cache["testitem"]; lblinfo.Text += "Test item is: " + testItem.ToString(); lblinfo.Text += "< br/ >"; } lblinfo.Text += "< br/ >"; }
اگر 30 ثانیه بعد مجددا روی دکمه کلیک کنید، صفحه postback (بازگردانده) می شود اما کنترل label اطلاعات خود را از حافظه ی نهان بازیابی می کند: