عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش هفتم) |
مديريت وب |
12503 |
65 |
5 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
افزايش كارآيی برنامه های وب در ASP.NET 2.0
افزايش كارآئی برنامه های وب در ASP.NET 2.0
(بخش هفتم)
آنچه تاكنون گفته شده است :
-
بخش
های
اول و
دوم
: اشاره به مجموعه ای از نكات كه رعايت آنها در زمان طراحی می تواند زمينه پياده
سازی يك برنامه وب كارآ را فراهم نمايد .
-
بخش
سوم
: معرفی برخی ابزارها برای تست برنامه های وب
-
بخش
چهارم :
مفاهيم اوليه caching ، روش های
caching در ASP.NET ، نحوه استفاده از
output caching
-
بخش
پنجم :
Caching و Query string
-
بخش
ششم :
Custom Caching Control
در اين بخش
به
بررسی data
caching خواهيم پرداخت .
caching
داده
caching
داده ، انعطاف پذيرترين نوع caching است كه استفاده از
آن مستلزم انجام مراحلی خاص در برنامه است . پياده كنندگان برنامه های وب می توانند
با استفاده از پتانسيل فوق آيتم هائی را كه هزينه ايجاد آنها گران است به شی
cache اضافه نمايند .
cache يك خصلت از كلاس صفحه است و نمونه ای از كلاس
System.Web.Caching.Cache را بر می گرداند . عملكرد شی فوق شباهت زيادی با شی
Application دارد ( نظير دستيابی به آن در تمامی صفحات
توسط سرويس گيرندگان مختلف ) . علی رغم وجود شباهت های زياد ، دو شی
Application و Cache دارای
تفاوت هائی اساسی با يكديگر می باشند :
-
شی Cache از نوع
thread-safe است . اين بدان معنی است كه
پياده كنندگان لازم نيست با صراحت عمليات lock و
unlock شی cache را قبل از
اضافه كردن و يا حذف يك آيتم از cache انجام دهند . به
عنوان نمونه ، در صورت ايجاد يك شی سفارشی ممكن است در يك لحظه بيش از يك سرويس
گيرنده قصد استفاده از آن را داشته باشند . در چنين مواردی اين احتمال وجود خواهد
داشت كه شرايط استفاده از داده غيرمعتبر برای هر يك از سرويس گيرندگان فراهم گردد .
برای غلبه بر محدوديت فوق می توان از روش های مختلفی استفاده نمود . ايجاد يك نسخه
ديگر از شی به منظور استفاده از آن در يك صفحه ، يكی از ساده ترين راهكارهای موجود
در اين زمينه است .
-
آيتم های موجود در شی Cache بطور
اتوماتيك از آن حذف می گردند . ASP.NET يك
آيتم را پس از اتمام مدت زمان اعتبار آن ، در صورت تغيير يكی از اشياء و يا فايل
های وابسته و يا كمبود حافظه سرويس دهنده از cache
خارج می نمايد . اين بدان معنی است كه پياده كنندگان می توانند با خيالی آسوده از
cache استفاده نمايند بدون اين كه نگران از دست دادن
منبع ارزشمند حافظه باشند چراكه ASP.NET در صورت
نياز آيتم ها را از حافظه خارج خواهد كرد . با توجه به اين كه همواره اين احتمال
وجود دارد كه آيتم های ذخيره شده از cache خارج شده
باشند می بايست همواره قبل از دستيابی ، موجود بودن آنها در
cache بررسی گردد .
-
آيتم های موجود در cache از
وابستگی ها ( dependencies ) حمايت می نمايند . پياده كنندگان می
توانند يك شی cache شده را به يك فايل ، يك جدول
بانك اطلاعاتی و يا يك منبع ديگر مرتبط نمايند . در صورت بروز تغييرات در منبع
وابسته ، شی cache شده بطور اتوماتيك غيرمعتبر می گردد و
در نهايت از حافظه حذف می شود .
اضافه كردن آيتم به cache
برای اضافه كردن يك شی درون cache از روش های
مختلفی استفاده می گردد . يكی از روش های موجود نسبت دهی داده مورد نظر به يك نام و
ذخيره آن در شی cache است ( نظير كار با اشياء
Session و Application ) . با
توجه به اين كه در اين روش نمی توان برای شی cache شده
يك مدت زمان خاص را مشخص نمود ، استفاده از اين روش كمتر توصيه شده است .
Cache("KeyName") = objectToCache |
يكی ديگر از روش های
درج داده درون شی cache ، استفاده از متد
Insert است . متد فوق دارای چهار نسخه خاص است . در جدول
زير ، گرامر يكی از نسخه های فوق كه جزئيات بيش تری از كار را با بكارگيری پنچ
پارامتر مشخص می نمايد، نشان داده شده است .
Cache.Insert(key, item, dependencies,
absoluteExpiration, slidingExpiration) |
در جدول زير
عملكرد هر يك از پارامترهای متد Insert توضيح
داده شده است .
پارامتر
|
عملكرد |
Key |
نام در نظر
گرفته شده برای آيتم Cache شده را مشخص می نمايد. بدين
ترتيب ، امكان دستيابی به آيتم
Cache شده بر اساس نام فراهم گردد. |
Item |
شی واقعی
كه قصد caching آن را داريم ، مشخص می نمايد . |
dependencies |
يك شی
CacheDependency كه به شما اجازه می دهد يك وابستگی برای آيتم مورد نظر در
cache را ايجاد نمائيد .
در صورتی كه قصد تعريف يك آيتم وابسته را نداريم ، مقدار اين پارامتر می بايست
null در نظر گرفته شود . |
absoluteExpiration |
يك شی
DataTime كه زمان و تاريخ خارج كردن آيتم
cache شده از cache را
مشخص می نمايد . |
slidingExpiration |
يك
شی TimeSpan كه مدت زمان انتظار بين درخواست های متوالی
در صورت عدم استفاده از داده cache شده جهت خروج از
cache را مشخص می نمايد .
به عنوان مثال ، در صورتی كه اين مقدار 20 دقيقه در نظر گرفته شود و در مدت زمان
فوق هيچگونه درخواستی برای داده فوق دريافت نگردد ، ASP.NET
آن را از حافظه خارج خواهد كرد . |
جدول 1 : پارامترهای متد
Insert
معمولا" از تمامی
پارامترهای فوق در يك زمان استفاده نمی گردد . به عنوان مثال ، Cache dependencies
يك ابزار خاص است كه به كمك آن می توان وابستگی يك آيتم cache
شده به ساير منابع تاثيرگذار را مشخص نمود .
در صورتی كه قصد استفاده از يك absolute expiration را داشته باشيم ، می بايست
مقدار پارامتر slidingExpiration معادل TimeSpan.Zero در نظر گرفته شود.
Cache.Insert("MyItem", obj,
Nothing,DateTime.Now.AddMinutes(60), TimeSpan.Zero) |
در صورتی كه مطمئن
باشيم اطلاعات موجود در يك آيتم cache شده در يك بازه
زمانی خاص معتبر باقی می ماند ( نظير يك گزارش هواشناسی ) ، استفاده از absolute
expiration توصيه می گردد . در صورتی كه داده ذخيره شده در
cache همواره معتبر باشد ( نظير كاتولوگ يك محصول ) ، استفاده از Sliding
expiration توصيه می گردد . به عنوان يك سياست مطلوب در خصوص بكارگيری
Sliding expiration ، می توان مقدار پارامتر absoluteExpiration را به
DateTime.Max نسبت داد .
Cache.Insert("MyItem", obj,
Nothing,DateTime.MaxValue, TimeSpan.FromMinutes(10)) |
يك مثال كاربردی
در برنامه زير يك سيستم caching داده ساده
پياده سازی شده است . در اين مثال يك آيتم با نام TestItem كه تاريخ و زمان
جاری را در خود نگهداری می نمايد به مدت 30 ثانيه cache
می گردد . پس از postback صفحه ، در صورتی كه تاريخ
اعتبار آيتم ذخيره شده در cache به اتمام نرسيده باشد ،
مقدار آن از cache بازيابی و در خروجی نمايش داده می شود
. پس از اتمام تاريخ اعتبار آيتم ذخيره شده در cache ،
مجددا" و بر اساس داده جديد ( تاريخ جديد سيستم ) آيتم مورد نظر ايجاد و جهت
استفاده آتی در cache ذخيره می گردد .
ذخيره و بازيابی داده
در شی cache |
<%@ Page Language="VB" Culture="fa-IR"
UICulture="fa-IR" %>
<Script Runat="server">
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Me.IsPostBack Then
lblInfo.Text &= "ارسال مجدد صفحه برای سرويس
دهنده<br />"
Else
lblInfo.Text &= "ايجاد صفحه<br />"
End If
If Cache("TestItem") Is Nothing Then
lblInfo.Text &= "ايجاد داده جهت ذخيره در cache<br />"
Dim testItem As DateTime = DateTime.Now
lblInfo.Text &= "به مدت 30 ثانيه<br />"
Cache.Insert("TestItem", testItem, Nothing,
DateTime.Now.AddSeconds(30), TimeSpan.Zero)
Else
lblInfo.Text &= "بازيابی داده از cache...<br />"
Dim testItem As DateTime = CType(Cache("TestItem"), DateTime)
lblInfo.Text &= "داده cache شده : '" & testItem.ToString()
lblInfo.Text &= "'<br />"
End If
lblInfo.Text &= "<br />"
End Sub
</Script>
<html xmlns="http://www.w3.org/1999/xhtml" dir ="rtl">
<head id="Head1" runat="server">
<title>تست caching داده </title>
</head>
<body style="font-family: Tahoma;">
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1"
runat="server" Text="ارسال صفحه برای سرويس دهنده" Font-Names="Tahoma" />
<br /><br />
<asp:Label ID="lblInfo"
runat="server"></asp:Label>
</div>
</form>
</body>
</html> |
شكل زير خروجی برنامه
فوق را نشان می دهد .

شكل 1 : ذخيره و بازيابی
داده در شی cache
در بخش
هشتم بحث خود را بر روی data caching
ادامه خواهيم داد .