kColumns در خروجي و به منظور دريافت نقطه نظرات كاربر نمايش داده مي شود . بدين منظور از كد زير در روتين page_load استفاده شده است .
نمايش ليستي از ستون ها توسط يك كنترل CheckBoxList
chkColumns.DataSource = ds.Tables(0).Columns
chkColumns.DataMember = “Item”
chkColumns.DataBind()
Dataset به مدت دو دقيقه كه توسط پارامتر sliding expiration مشخص شده است در cache قرار مي گيرد . ذخيره Dataset در Cache در زمان ايجاد DataSet و از طريق روتين GetDataSet و به كمك متد Insert شي cache انجام مي شود .
ذخيره DataSet در cache به مدت 2 دقيقه
Cache.Insert(“DataSet”, ds, Nothing, DateTime.MaxValue,TimeSpan.FromMinutes(2))
پس از كليك بر روي دكمه ” فيلتر و نمايش اطلاعات ” ، در ابتدا سعي مي گردد كه DataSet از طريق cache بازيابي گردد ( استفاده از روتين GetDataSet ) . در صورتي كه صفحه نتواند DataSet را از cache بازيابي نمايد ، تابع RetrieveData فراخوانده مي شود تا پس از توليد DataSet در ادامه بتوان آن را به cache اضافه نمود .
براي آگاهي كاربران منبع ارائه اطلاعات نيز در خروجي نمايش داده مي شود ( ايجاد و ذخيره اطلاعات در cache و يا بازيابي اطلاعات از cache ) .
بازيابي DataSet از cache و يا ايجاد و ذخيره مجدد DataSet در cache
Function GetDataSet() As DataSet
Dim dsPubs As DataSet
If Cache(“Titles”) Is Nothing Then
dsPubs = RetrieveData()
Cache.Insert(“Titles”, dsPubs, Nothing, DateTime.MaxValue, TimeSpan.FromMinutes(2))
lblCacheStatus.Text = “ايجاد اطلاعات و ذخيره آنها در cache”
Else
dsPubs = CType(Cache(“Titles”), DataSet)
lblCacheStatus.Text = “بازيابي اطلاعات از cache”
End If
Return dsPubs
End Function
براي ارائه يك grid قابل پيكربندي ، كد موجود در روتين cmdApply_Click در DataTable حركت و تمامي ستون هائي را كه كاربر جهت عدم نمايش در خروجي فيلتر نموده است ، از grid حذف مي نمايد ( قبل از حذف ستون هائي از DataSet يك نسخه ثانويه از آن ايجاد مي گردد ) .
در اين رابطه شايد بتوان از گزينه هاي متعدد ديگري استفاده نمود ولي استراتژي بكار گرفته شده در مثال فوق بيانگر يك حقيقت مهم در خصوص caching است . زماني كه يك آيتم بازيابي مي گردد در واقع يك مرجع به شي cache شده بازيابي شده است و اگر شي تغيير يابد ، در حقيقت آيتم cache شده تغيير يافته است .
فيلترينگ داده بر اساس خواسته كاربر جهت نمايش در Gridview
Sub cmdApply_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdApply.Click
Dim ds As DataSet = GetDataSet()
ds = ds.Copy()

For Each item As ListItem In chkColumns.Items
If item.Selected Then
ds.Tables(0).Columns.Remove(item.Text)
End If
Next
gridPubs.DataSource = ds.Tables(0)
gridPubs.DataBind()
End Sub
كد مثال فوق بطور كامل در جدول زير نشان داده شده است .
ذخيره داده بازيابي شده از بانك اطلاعاتي در cache
و استفاده از آن بر اساس خواسته كاربر قبل از اتمام تاريخ اعتبار آن
%@ Page Language=”VB” Culture=”fa-IR” UICulture=”fa-IR” %
%@ import Namespace=”system.Data” %
%@ import Namespace=”system.Data.SqlClient” %
%@ Import Namespace=”System.Web.Configuration” %

‘==============================================================


Untitled Page

ستون هائي را كه قصد نمايش آنها در خروجي را نداريد ، انتخاب نمائيد :



Hide Columns:







شكل 1 خروجي برنامه فوق را نشان مي دهد .

شكل 1 : ذخيره داده بازيابي شده از بانك اطلاعاتي در cache
و استفاده از آن بر اساس خواسته كاربر
در بخش نهم بحث خود را بر روي data caching ادامه خواهيم داد .

افزايش كارآئي برنامه هاي وب در ASP.NET 2.0 (بخش نهم)
آنچه تاكنون گفته شده است :
بخش هاي اول و دوم : اشاره به مجموعه اي از نكات كه رعايت آنها در زمان طراحي مي تواند زمينه پياده سازي يك برنامه وب كارآ را فراهم نمايد .
بخش سوم : معرفي برخي ابزارها براي تست برنامه هاي وب
بخش چهارم : مفاهيم اوليه caching ، روش هاي caching در ASP.NET ، نحوه استفاده از output caching
بخش پنجم : Caching و Query string
بخش ششم : Custom Caching Control
بخش هفتم : caching داده و نحوه استفاده از شي cache
بخش هشتم : بررسي يك مثال جهت ايجاد caching با قابليت مشاهده چندين view از داده
در اين بخش بحث خود را بر روي data caching ادامه داده و به بررسي كنترل هاي منبع داده و caching خواهيم پرداخت .
كنترل هاي ObjectDataSource ، SqlDataSource و XmlDataSource بطور ذاتي از امكانات caching حمايت مي نمايند . استفاده از caching به همراه كنترل هاي فوق اكيدا” توصيه مي گردد چراكه برخلاف كد سفارشي نوشته شده توسط پياده كنندگان به منظور دستيابي داده ، كنترل هاي منبع داده همواره در هر postback يك query را بر روي منبع داده اجراء مي نمايند .
كنترل هاي فوق ، همچنين براي هر كنترل نسبت دهي يك query در سطح منبع داده را اجراء مي نمايند . به عنوان نمونه اگر در يك صفحه از سه كنترل نسبت دهي داده در ارتباط با يك منبع داده يكسان استفاده شده باشد ، سه query مجزاء بر روي بانك اطلاعاتي و قبل از تفسير و ارسال صفحه براي سرويس گيرنده ، اجراء خواهد شد . بديهي است حتي با استفاده از امكانات اندك caching به همراه كنترل هاي منبع داده ، شاهد بهبود چشمگير كارآئي و كاهش load عملياتي در سمت سرويس دهنده خواهيم بود .
با اين كه تعداد زيادي از كنترل هاي منبع داده از caching حمايت مي نمايند ، ولي ويژگي فوق به عنوان يك ضرورت در بكارگيري كنترل هاي منبع داده مطرح نمي گردد و مي توان از كنترل هاي منبع داده ئي كه از پتانسيل caching حمايت نمي نمايند نيز استفاده كرد .
براي حمايت از caching كنترل هاي ObjectDataSource ، SqlDataSource و XmlDataSource از خصلت هاي مشابهي استفاده مي نمايند . در جدول 1 ، خصلت هاي فوق نشان داده شده اند .
خصلت
عملكرد
EnableCaching
با نسبت دهي مقدار True به خصلت فوق ، پتانسيل caching فعال مي گردد . مقدار پيش فرض خصلت فوق False در نظر گرفته مي شود .
CacheExpirationPolicy
سياست و يا استراتژي زمان اتمام تاريخ اعتبار cache را مشخص مي نمايد . بر اين اساس مي توان مقدار خصلت فوق را ثابت و يا متغير ( مدت زمان بين دو درخواست متوالي ) در نظر گرفت .
CacheDuration
مدت زمان caching آيتم مورد نظر در cache را بر حسب ثانيه مشخص مي نمايد .

CacheKeyDependency
و
SqlCacheDependency
امكان ايجاد يك وابستگي بين يك آيتم cache شده با آيتم ديگر در data cache ( با استفاده از CacheKeyDependency ) و يا يك جدول بانك اطلاعاتي(با استفاده از SqlCacheDependency ) را فراهم مي نمايد .
جدول 1 : خصلت هاي caching كنترل هاي منبع داده
Caching در كنترل منبع داده SqlDataSource
پس از فعال كردن پتانسيل caching در كنترل SqlDataSource ، ماحصل اجراي SelectQuery براي استفاده آتي Cache مي گردد . در صورت اجراء يك select query پارامتريك ، كنترل فوق براي هر مجموعه از مقادير پارامترها يك نسخه جداگانه را cache مي نمايد .
مثلا” ‌فرض كنيد قصد داريم صفحه اي را ايجاد نمائيم كه در آن ليست كاركنان بر اساس نام شهر نمايش داده شود . پس از انتخاب شهر توسط كاربر ، از يك كنترل SqlDataSource براي برگرداندن ركوردهاي كاركناني كه با نام شهر مطابقت مي نمايند جهت نمايش در يك grid استفاده شده است .
كد زير نحوه استفاده از كنترل SqlDataSource با هدف فعال كردن caching را نشان مي دهد .



در مثال فوق ، پس از انتخاب شهر توسط كاربر ، يك query جداگانه اجراء خواهد شد تا ليست كاركنان با توجه به شهر انتخاب شده ، بازيابي و در يك DataSet به ميزان 10 دقيقه ( 600 ثانيه ) ، cache گردد . در صورت انتخاب يك شهر ديگر توسط كاربر ، پردازش فوق تكرار و مجددا” يك DataSet جديد ايجاد و cache مي گردد. در صورت انتخاب يك شهر توسط كاربري كه قبلا” توسط كاربران ديگر انتخاب شده است ، DataSet مورد نظر از cache بازيابي خواهد شد ( مشروط به عدم اتمام مدت زمان اعتبار حضور آن در cache ) .
توجه داشته باشيد زماني كه مقدار خصلت DataSourceMode معادل DataSet در نظر گرفته شده باشد (مقدار پيش فرض) ، پتانسيل caching در كنترل منبع داده SqlDataSource به خوبي كار مي كند . شي DataReader نمي تواند بطور موثر cache گردد چراكه شي فوق قادر به برقراري يك ارتباط مستقيم و زنده با بانك اطلاعاتي نمي باشد .
در صورتي كه برخي پارامترها نسبت به پارامترهاي ديگر با فركانس بيشتري استفاده شده باشند ، caching جداگانه نتايج با توجه به مقادير مختلف پارامترها وضعيت مطلوبتري را به دنبال خواهد داشت . مثلا” اگر نتايج

دیدگاهتان را بنویسید