Cache کردن
داده ها با استفاده
ازObjectDataSource
Caching می
تواند به
معنای
تفاوت بین
یک Web Application سریع
و یک Web Application
کند
باشد. قصد
داریم اولین
بخش Caching درASP.NET2 را در
این مبحث
توضیح دهیم
.هدف اصلی در
این مبحث
چگونگی به
کار گیری یک
کنترلObjectDataSource برای Cache کردن
داده ها در
لایه ی Presentation است.
مقدمه:
در علم
کامپیوتر، Caching فرایندی
است که یک کپی
از داده ها یا
اطلاعاتی که
هزینه ی
دسترسی یا
دریافت زیادی دارند
را درمحلی که
قابل دسترسی
سریعتر است ،
ذخیره می کند.
برایهای با
داده خارجی ،
معمولا Query های
بزرگ وپیچیده ،
زمان اجرای زیادی
را مصرف
می کنند. جهت
افزایش
کارایی
Application ، با
ذخیره ی نتايج
Query ها ی پرهزینه
ي دیتابیس در
حافظه ی
،Applicationاز
این زمان می
کاهیم. Application
ASP.NET2 گزینه
های مختلفی
از Caching را
ارائه داده
است. کنترلهای ObjectDataSourse و SqlDataSource قابلیتهای Cache کردن
را فراهم می
کنند ، در
نتیجه اجازه
می دهند داده
ها در سطح
کنترل ها cache شوند. در ASP.NET2یک API غنی cache فراهم
شده است که
developer ها را قادر
می سازد تا از
اشیائ cache در
حالت برنامه
نویسی
استفاده
کنند.در این مبحث و
3مبحث بعدی
چگونگی
استفاده
ازویژگی
chaching یک ObjectDataSource را
توضیح
می
دهیم.همچنین
به
توضیح چگونگی cache کردن
داده هایی که
درهستند
و چگونگی
به روز نگهداشتن
داده های cache شده
با استفاده از SQL Cache Dependencies می
پردازیم. Application
caching را
می توان در هر
محلی از
معماری به کار
برد ، از لایه
ی Data Access تا
لایه ی
presentationدر این
مبحث
بکاربردن
caching را در لایه
ی Presentation با
استفاده از یک کنترلObjectDataSource خواهیم
دید.در مبحث
بعدی cache کردن
داده ها در
لایه ی Business logic را
توضیح خواهیم
داد.
مفاهیم
کلیدی Caching
عمل Caching ،داده
های با
هزینه ی
ایجاد زیاد را
می گیرد و یک
کپی از آنها
را
در محلی که
روش دسترسی
مناسب
تری دارد ،
ذخیره می
کند.به این
ترتیب caching به
نسبت بسیار
خوبی کارایی
کلی
Application را بهبود
می بخشد. از
آنجایی که
cache فقط یک کپی
واقعی
از داده
های لایه ی
زیرین را نگه
می دارد ، اگر
داده های لایه
ی زیرین تغییر
کنند ،
داده های آن
کپی منسوخ و
قدیمی می
شوند.برای جلوگیری
از این اتفاق ، Developer میتواند
معیارهایی را
جهت تعیین
این که کدام
آیتم cache باید
از cache خارج
شود، انتخاب
کند:
- معیار
مبتنی بر
زمان –یک
آیتم ممکن
است برای
یک مدت زمانی
مطلق(absolute) یا یک
مدت زمانی
متحرک(sliding)
به
cache اضافه شود.برای
مثال ، زمانی
که یکمدت
زمان كش را 60
ثانیه مقدار
دهي نمايد، .اگر
این مدت
مطلق(absolute)باشد،
آیتم cache شده
پس ازگذشت 60
ثانیه از
زمان اضافه
شدنش بهاز آن
خارج می شود(
با صرفه نظر
از تعداد
مرتبه های
دسترسی به آن
آیتم). و اگر این
مدت متحرک(sliding)باشد،
آیتم cache شده
60 ثانیه پس از
آخرین
دسترسی از cache خارج
می شود.
Developer
cache
- معیار
مبتنی بر
وابستگی(Dependency)
-زمانی که
یک آیتم به cache اضافه
می شود می
تواند یک
وابستگی(dependency)
بهمراه داشته
باشد. زمانی
که این
وابستگی(تعلق)
تغییر می کند،آیتم
از cache خارج
می شود.
یک تعلق(dependency)
ممکن است
یک فایل، یک آیتم
دیگر cache ، یا
ترکیبی از هر دوباشد.
بدون در نظر
گرفتن
معیارهای اخراج
آیتم از cache ، یک
آیتم در cache ممکن
است قبل
اززمان مبنا
یا قبل از
تغییر
وابستگی dependency- مبنا ،
پاک شود. اگر
ظرفیت cache پر
باشد، آیتم
های موجود
باید قبل از
اضافه شدن
آیتم( یا آیتم
های جدید)،
حذف شوند. درنتیجه
وقتی از طریق برنامه
نویسی با داده
های cache شده
کار می کنید،
باید همیشه
فرض کنید که
داده های cache شده
درحاضرنیستند
(ممکن است حذف
شده باشند.) cache
Cach کردن
ابزار مقرون
به صرفه
ای برای
افزایش
کارایی یکApplication است.Steven Smith در
مقاله اش
میگوید:
"caching یک راه
خوب برای
رسیدن به
کارایی مناسب،
بدون صرف زمان
زیاد و یا تجزيه
و تحلیل مي
باشد. حافظه
ارزان است، بنابراین
اگر قصد دارید
به کارایی
خوبی برسید، به
جای صرف یک
روز یا یک
هفته زمان
برای بهینه
کردن کد یا
دیتابیس، راه
حل Caching را
به کار برید…
امروزه اگر نیازمند
به کارایی
کافی هستید caching می
تواند
بهترین باشد"
Caching کارایی
را به طور
قابل تحسینی
بالا مي برد،
اما در همه ی
موارد نمی
توان ازآن
استفاده کرد.
مانند
برنامه های کاربردی real-time یا
به روزرسانی
های مداوم داده
ها(frequently-updating data). اما
در اکثر
کاربردها cachingمي
تواند مورد استفاده
قرار بگيرد.
مرحله ی1:
ایجا دweb page های Caching
در اولین
گام صفحات ASP.NET ی را که
برای این مبحث
و3 مبحث
دیگر مورد
نیاز است ،
ایجاد می
کنیم. یک پوشه جدید
با نام Caching و
سپس صفحاتی با
نامهای زیر را
ایجاد می کنیم:
- Default.aspx
- ObjectDataSource.aspx
- FromTheArchitecture.aspx
- AtApplicationStartup.aspx
- SqlCacheDependencies.aspx
|
User کنترلی
که در SectionLevelTutorialListing.ascx آماده
است را
فراخواني
كنيد. بدين
منظور، این User Control را با
درگ کردن
ازSolution Explorer به این صفحه(Default.aspx)اضافه کنید.
ودر آخر،
این صفحات را
به فایل
Web.sitmap اضافه
کنید. markup زیر
را بعد از Working
with Binary Data"" اضافه کنید(درفایل Web.sitmap )
|
<siteMapNode title="Caching"
url="~/Caching/Default.aspx" description="Learn how to use the
caching features of ASP.NET
2.0."> <siteMapNode url="~/Caching/ObjectDataSource.aspx"
title="ObjectDataSource Caching" description="Explore how to
cache data directly from the ObjectDataSource control." />
<siteMapNode url="~/Caching/FromTheArchitecture.aspx"
title="Caching in the Architecture" description="See how to
cache data from within the architecture." /> <siteMapNode
url="~/Caching/AtApplicationStartup.aspx" title="Caching Data
at Application Startup" description="Learn how to cache expensive
or infrequently-changing queries at the start of the application." />
<siteMapNode url="~/Caching/SqlCacheDependencies.aspx"
title="Using SQL Cache Dependencies" description="Examine how
to have data automatically expire from the cache when its underlying database
data is modified." /> </siteMapNode>
|
نتیجه ی
این تغییرات
را می توانید
در Browser ببینید
.آیتمهایی
برای مبحثcaching به
منویی که قبلا
ساخته بودیم اضافه
شده اند.
مرحله ی
2:نمایش یک
لیست از Product
ها در یک
صفحه
در این مبحث
همانطور که
قبلا گفته
شد به چگونگی
استفاده از
ویژگی های cachingداخل(
تو کار) کنترل ObjectDataSource می
پردازیم. قبل
از دیدن این
ویژگی ها، یکGridView جهت
نشان دادن
لیست اطلاعاتProduct بازیابی
شده توسط
یکobjectDataSource
از کلاس
ProductBLL به صفحه
اضافه مي کنیم.
صفحه ی ObjectDataSource.aspx
را در پوشه Caching باز
کنید.یک GridView
از Toolbox
به صفحه
اضافه کنید.و ID آن را با
مقدارProducts مقداردهي
نماييد
و در
smart tag مربوط
به GridView، آن را
به یک کنترلObjectDataSource با
نام
ProductsDataSourceljwg متصل کنید. ObjectDataSource را به
گونه ای
پیکربندی
کنید که با
کلاس ProductsBLL کار کند.
برای این که
بتوانیم
بفهمیم
وقتی داده
های cache شده
در یک
ObjectDataSource تغییر می
کنند چه
اتفاقی رخ می
دهد ،
یک GridView قابل
ویرایش در
صفحه ایجاد مي
کنیم. drop-down list داخل
تب SELECT را
با مقدار
پیش فرض آن
(GetProducts()) مقدار
دهی کنید.اما
آیتم انتخاب
شده در تبUpdate را
با متد
UpdateProduct با 3
پارامتر
ورودی(productName،
unitPrice،
productID ) تغییر
دهید.
در آخر،
drop-down list تبهایINSERT وDELETE را
با "(None)" مقداردهي
کنید.به محض
کامل شدن
ویزارد
Configure Data Source ،
ویژوال
استودیو خاصيتOldValuesParameterFormatString
مربوط
به datasource را با
original_{0} مقداردهی
می کند.مقدار
این خاصيت باید
حذف شود یا با مقدار {0}
ست شود تا
اقدامات
workflow بدون خطا
انجام شود.
بعلاوه،
ویژوال
استودیو برای هر
فیلد داده
جدول Productدر GridView یک
فیلد ایجاد می
کند.همه ی این BoundField ها به
جز BoundField هایProductName: CategoryNameوUnitPrice را
حذف کنید.سپس HeaderText هر یک
از این BoundField ها را به“Product”، “Category” و“Price” تغییر
دهید.از
آنجایی که
فیلدProductName یک
فیلد ضروری
است، BoundField را
به templateField تغییر
دهید و یک
RequiredFieldValidator به
EditItemTemplate اضافه
کنید. به همین
ترتیب
UnitPrice BoundField را
به TemplateFieldتغییر
دهید و یکCompareValidator بهTemplateField جهت
اطمینان از اینکه
مقدار داده
شده به این
فیلد، یک
مقدار رایج
ومعتبر و
بزرگتر یا
مساوی صفر است ، اضافه
کنید.
GridView را editable کنید.همچنین checkbox مربوط
به “Enable Paging”و “Enable Sorting”را انتخاب
كنيد.
بعد
از اعمال این تغییرات
در GridView ، markup وObjectDataSource به
صورت زیر
است:
|
<asp:GridView ID="Products"
runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID"
DataSourceID="ProductsDataSource" AllowPaging="True"
AllowSorting="True"> <Columns> <asp:CommandField
ShowEditButton="True" /> <asp:TemplateField
HeaderText="Product" SortExpression="ProductName">
<EditItemTemplate> <asp:TextBox ID="ProductName"
runat="server" Text='<%# Bind("ProductName")
%>'></asp:TextBox> <asp:RequiredFieldValidator
ID="RequiredFieldValidator1" Display="Dynamic"
ControlToValidate="ProductName" SetFocusOnError="True"
ErrorMessage="You must provide a name for the product."
runat="server">*</asp:RequiredFieldValidator>
</EditItemTemplate> <ItemTemplate> <asp:Label ID="Label2"
runat="server" Text='<%# Bind("ProductName")
%>'></asp:Label> </ItemTemplate> </asp:TemplateField>
<asp:BoundField DataField="CategoryName"
HeaderText="Category" ReadOnly="True"
SortExpression="CategoryName" /> <asp:TemplateField
HeaderText="Price" SortExpression="UnitPrice">
<EditItemTemplate> $<asp:TextBox ID="UnitPrice"
runat="server" Columns="8" Text='<%#
Bind("UnitPrice"،، the
value must be greater than or equal to zero."
Operator="GreaterThanEqual" SetFocusOnError="True"
Type="Currency" runat="server"
ValueToCompare="0">*</asp:CompareValidator>
</EditItemTemplate> <ItemStyle HorizontalAlign="Right"
/> <ItemTemplate> <asp:Label ID="Label1"
runat="server" Text='<%# Bind("UnitPrice"، "{0:c}") %>' /> </ItemTemplate>
</asp:TemplateField> </Columns> </asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource"
runat="server" OldValuesParameterFormatString="{0}" SelectMethod="GetProducts"
TypeName="ProductsBLL" UpdateMethod="UpdateProduct">
<UpdateParameters> <asp:Parameter Name="productName"
Type="String" /> <asp:Parameter Name="unitPrice"
Type="Decimal" /> <asp:Parameter Name="productID"
Type="Int32" /> </UpdateParameters>
</asp:ObjectDataSource>
"{0:N2}") %>'></asp:TextBox> <asp:CompareValidator
ID="CompareValidator1" ControlToValidate="UnitPrice"
Display="Dynamic" ErrorMessage="You must enter a valid
currency value with no currency symbols. Also
|
شکل زیر یک GridView را
نشان می دهد که name، category و price را
برای هر
products در
دیتابیس
لیست کرده
است.
مرحله ی 3: زمان
درخواست داده
توسطObjectDataSource
Products
gridview با
استفاده
از متد Selectمربوط
به،ProductsDataSource داده
هایش را جهت
نمایش دادن بازیابی
می کند.اینObjectDataSource یک
نمونه از کلاسProductsBLL لایه
یBusiness
Logic ایجاد می
کندو متد
GetProducts() آن
را فرا می
خواند. این
متد، متد
GetProducts()مربوط بهProductsTableAdapter لایه
یData
Access را فرا می
خواند . متدADL به دیتابیس Northwind متصل
می شود و query یSELECT پیکربندی
شده را صادر
می کند .سپس
نتايج به DAL برگردانده
می شود. شیبه BLL برگردانده
می شود و آن شی
به ObjectDataSource ی که به
GridView متصل شده
است، فرستاده
می شود. سپس
GridView یک
شی GridViewRow برایهرDataRow در DataTable ایجاد
می کند و
سرانجام هر GridViewRow در
کلاینت به HTML ترجمه
می شود ودر browser
بازدیدکننده
ی وب سایت
نمایش داده می شود.
DataTable
هر بار که GridView به
داده های
لایه ی زیرین
متصل شود، این
توالی
رویدادها
اتفاق می
افتد.از جمله
زمانهایی که GridView به لایه
زیرین متصل می
شود عبارتند
از:هر گاه که
صفحه برای
اولین بارمی
شود، هرگاه که
از یک صفحه ی
داده به صفحه
ی دیگر برویم،
هرگاه که
GridView را Sort کنیم
یا هرگاه که GridView را با گزينه
هاي edit یا delete اش
ویرایش کنیم. اگر
خاصيتview state مربوط
به grid
view، disabled باشد، GridView در هر postback موفق
دوباره به
لایه ی
زیرین متصل می
شود. و جهت
دوباره متصل شدن
به داده ها ،
می تواند
متدDataBind() اش را
فراخواند. visit
برای درک
اینکه کدام
داده از
دیتابیس بازیابی
می شود، پیغامی
در زمان آغاز
بازیابی
دوباره داده
ها نشان ميدهیم.
یک کنترلlable در
بالای GridView به
نام ODSEvents به
صفحه اضافه می
کنیم. مقدار Text آن را
پاک کرده و
خاصيتEnableViewState آن را false کنید.
در زیرکنترل lable یک Button اضافه
کنید و خاصيتText آن
را "Postback"کنید.
در طي گردش
كار دستيابي
به داده، رویدادSelecting مربوط
به object
datasource قبل از
ایجاد شی
لایه ی
زیرین ،
برانگیخته می
شود ومتد
پیکربندی آن
درخواست می
شود.یک event handler برای
این رویداد
ایجاد کنید وکد
زیر را به آن
بیفزایید:
|
protected void ProductsDataSource_Selecting(object
sender، ObjectDataSourceSelectingEventArgs e) {
ODSEvents.Text = "-- Selecting event fired"; }
|
هر بار کهObjectDataSource داده
اي درخواست
نمايد، lable متن "Selecting event fired" را
نشان میدهد.
صفحه را در browser ببینید.وقتی
صفحه برای
اولین بار
دیده می شود،
متن" Selecting
event fired" نشان
داده می
شود.دکمه ی "
Postback "را کلیک
کنید.می بینید
که متن ظاهرنشد(خاصيت
EnableViewState به
طور پیش فرض true است).دلیلش
این است که در postback ،
gridview با
استفاده از view state اش
نوسازی می شود
وبهObjectDataSource برای
داده هایش
مراجعه نمی
کند.Sort،Page وEdit کردن باعث
می شودGridView دوباره
به data source اش
متصل شود و
بنابراین
پیام"Selecting
event fired"نشان
داده می شود.
به نظر می
آید بازیابی
داده های
دیتابیس در هر sort کردن
یا ورق زدن
کار بی فایده
ای باشد.
از آنجایی
که ما از paging پیش
فرض استفاده
می کنیم، وقتی
اولین صفحه
نمایش داده می
شود،همه ی
رکوردها را
بازیابی کرده
است.حتی اگر gridview ،paging وsorting را
پشتیبانی
نکند، داده ها
دراولین visit توسط
کاربران باید
از دیتابیس بازیابی
شوند(درصورتی
کهview
state فعال
باشد ، برای postback ها نیز
این مطلب
صادق
است.).اما اگر GridView داده
های مشابه ای
را برای
همه ی کاربران
نشان می
دهد، این
درخواستهای
اضافی داده،
زاید هستند. چرا
نتیجه های
برگشتی از متد GetProducts()راcache نکنیم
و GridViewرا
به این داده
های cache شده
متصل کنیم؟
ObjectDataSource
مرحله ی 4:Cache کردن
داده ها
با استفاده
از ObjectDataSource
ما می
توانیم
ObjectDataSource را به
گونه ای
پیکربندی
کنیم که به
طور خودکار
داده های
بازیابی شده
اش را در data
cache مربوط به ASP.NET2 ،
cashکند
· Enable caching: در
صورتي كه
بخواهيم از caching استفاده
نماييم اين
خاصيت را true مي كنيم
· CacheDuration: مدت
زمان نگه داري
داده كش شده
را مشخص مي
نمايد
· CacheExpirationPolicy: قطعي بودن
و بت متحرك
بودن مدت زمان
كش را مشخص مي
كند.
ProductsDataSource
را به گونه
ای پیکربندی ميکنیم
که داده هایش
رابا یک شاخص قطعی(absolute scale)،برای
30 ثانیه cache کند.خاصيت EnableCaching آبجکت
دیتاسورس
را با مقدارtrue ست
کرده و خاصيت CacheDuration را
مقدار 30 دهید. CacheExpirationPolicy همان
مقدار پیش فرض (Absolute)را
داشته باشد.
این
تغییرات را Save کرده
وصفحه را
دوباره در Browser
مي بینیم.
پیغام" Selecting
event fired"در اولین
بازدید
از صفحه
ظاهر می شود،
چون در ابتدا
داده ها در cache نیستند.اما
درهای بعدی
کلیک دکمه ی "Postback"، sorting،paging ویا
کلیک روی دکمه
های Edit یا Cancel پیغام "Selecting event fired" ظاهر
نمی شود. زیرا
رویدادفقط زمانی
که ObjectDataSource داده
ها را ازشی
لایه ی زیرین
می گیرد، برانگیخته
می شود.
رویداد
Selecting زمانی که
داده ها از data
cache دريافت می
شوند،
برانگیخته
نمی شود. postback
Selecting
بعد از 30
ثانیه، داده
ها از Cache خارج
خواهند
شد.همچنین اگر
متدهایInsert،
Update وDelete آبجکت
دیتا سورس
درخواست شوند
داده ها از cache خارج
خواهند شد.در
نتیجه این که،
اگر بعد از 30
ثانیه دکمه ی Update کلیک
شود یاsorting، pagingکلیک
شوندیا دکمه
های Edit یا Cancel یا
کلیک شوند ،
باعث می شود که ObjectDataSource داده
هایش را از شی
لایه ی زیرین
دریافت کند،
در نتیجه،
رویدادSelecting برانگیخته
می شود و
پیغام “Selecting
event fired” نمایش
داده می
شود.این نتیجه
های برگشتی در data cache قرار
می گیرند
توجه: اگر "Selecting event fired"راچندین
باردیدید،
حتی زمانی که
شما انتظار
دارید که
ObjectDataSource با
داده های cacheشده
کار کند، این
امر مربوط به
محدودیتهای
مقتضی حافظه است.اگر
حافظه
به اندازه ی
کافی فضای
خالی نداشته
باشد، ممکن
است داده هایی
که توسط
ObjectDataSource به
Cache اضافه شده
اند، پاک
شوند. اگر
ObjectDataSource به خوبی داده
ها را Cache نکرد
یا داده ها به
طور پراکنده Cache شدند، Application های
دیگر را
ببندید تا حافظه
آزاد شود و
دوباره سعی
کنید.
شکل
زیرجریان
کاری Caching یک
ObjectDataSource را نشان
می دهد. وقتی
که پیغام
“Selecting event fired”در
صفحه ی
شما نمایش
داده می شود،
به این دلیل
است که داده
ها در Cache نیستند
و باید از شی لایه ی
زیرین
بازیابی شوند.
وقتی این
پیغام ظاهر
نمی شود، به
این دلیل است
که داده
ها در Cache قابل
دسترسی
هستند.وقتی که
داده ها از Cache برمی
گردند هیچ
فراخوانی
برای شی
لایه ی زیرین
وجود ندارد،
بنابراین هیچ query از
دیتابیس اجرا
نمی شود.
هرApplication در
ASP.NET2 ، data cache مربوط
به خود دارد
که در میان
تمام صفحات و
بازدید کننده
ها مشترک
است.به این
معنا که داده
هایی که توسط ObjectDataSource درذخیره شده اند،
در بین تمام
کاربرانی که این
صفحه را می
بینند ، مشترک
است.برای
بررسی این
مورد، صفحه
ی ObjectDataSource.aspxرا
در browser باز
کنید.در اولین
بازدید صفحه،
پیغام “Selecting
event fired” نشان داده می
شود(فرض کنید
که داده های
اضافه شده بهcache با
تست قبلی به
آن اضافه شده
باشند
و اكنون خارج
شده اند. Browser
دیگری را
باز کنید و URL را
از Browser اول
به این Browser کپی
کنید. در Browser
دوم، پیغام “Selecting event fired”نشان
داده نمی
شود، زیرا
این Browser با Browser اول ازمشترک
استفاده می کنند. data
cache data cache
وقتی
که داده های
بازیابی شده
را به cache اضافه
می کند،
ObjectDataSource از یک
مقدار کلیدیcache استفاده
می کند .
اين مقدار
كليدي شامل: مقادير
Cacheduration وو business object
مربوط به obgect datasource در اين
مثال كلاس productbll
و هم چنين
مقدار خاصيت selectmethod و مقدار
و نام پارامتر
هاي مربوط به
اين متد
،
مي باشد.
cacheexpirationpolicy
اهمیت
ماندگاری
داده
وقتی که هر
کدام از
متدهای Insert،Update یا Delete آبجکت
دیتا سورس
درخواست شود، ObjectDataSource به طور خودکار
آیتمها را از Cache بیرون
می کند.این
کار به مقابله
با ماندگاری
داده ها،
از طریق پاک
کردن داده
هایی که در
صفحه تغيير
يافته اند، کمک
می کند. هرچند
که، یک
ObjectDataSource می تواند
از cache کردن برای
نشان دادن
داده های
قدیمی
استفادهکند.در
ساده ترین
مورد،داده
های ماندگار
می تواند از cache کردن
مستقیم داده
ها در دیتابیس
ناشی شود.
شاید یک مدیر
دیتابیس فقط
یک script را
که بعضی از
سطرها را در دیتابیس
ویرایش می کند
را اجرا کند.
فرض كنيد دو ObjectDataSource دارید
که ازSelectMethods یاSelectParametersمختلف
استفاده می
کنند، اما
داده های
مشابه اي
را update ميکنند ،
اگر يكي از
آنها یک سطر
را update کند داده ی موجود
در كش مربوط
به خود را غیر
معتبر ميکند و
چون داده ها
در كش بر اساس
كليدي كه به selectmethod و
selectparameters
بستگي دارد
ذخيره مي
شوند،كليد
داده هاي اين دو
ObjectDataSource
متفاوت مي
باشند،
بنابراين سطر
هاي مربوط به ObjectDataSource دوم
هنوز در كش
معتبر مي
باشند
به منظور
مشاهده ي اين
مسئله، يک
صفحه ایجاد
کنید که یک
GridView قابل
ویرایش
داشته باشد
و این GridView داده
هایش را از یکObjectDataSource بگیرد
که از Caching استفاده
می کند و به
گونه ای
پیکربندی شده
است که داده
ها را از متدGetProducts() کلاسProductsBLL می گیرد
.یک GridView وObjectDataSource دیگر
به این صفحه
اضافه
کنید
اما ایناز متدGetProductsByCategoryID(categoryID) استفاده
کند.از آنجایی
که خصوصیت
SelectMethod
آبجکت دیتا
سورس متفاوت
است، هر کدام
ازآنها مقدارهای cache شده ی
مربوط به
خود را
دارند.اگر یکProduct را
در یک GridViewویرایش
کنید. مقادير
كش شده براي GridView ديگر
تغييري
نخواهد كرد و
مقادير قبل از
ويرايش را به
كار خواهد برد
و تغییرات
ایجاد شده در GridView دیگر
را منعکس نمی
کند.
ObjectDataSource
خلاصه
اگر مایلید
داده های
ماندگار
بالقوه داشته
باشید، از
منقضی شدن
مبتنی بر زمان
استفاده
کنیدو از زمان
هاي كوتاهتر
را براي منقضی شدن در
مواقعي كه به
روز بودن داده
ها ها مهم است ،
استفاده کنید..
اگر دادههای قدیمی به
هيچ وجه مورد
قبول نیستند،
از
SQL cache dependencies استفاده
کنید.