صفحه اول سایت arrow کامپیوتر و فناوری اطلاعات arrow Cache - قسمت اول: Cache کردن داده ها با استفاده ازObjectDataSource

Ads by ganjineh.co.ir

- برای مشاهده تمام مقالات موجود در سایت و استفاده از تالار گفتمان لطفا با نام کاربری خود وارد شوید در صورتی که عضو نیستید < اینجا > کلیک کنید.


Cache - قسمت اول: Cache کردن داده ها با استفاده ازObjectDataSource چاپ ارسال برای دوستان
(5 :مجموع راي ها)
فرستادن :
Mohand.es
Balatarin
Donbale
نوشته شده توسط مهندس صبحی   
پیش گفتار :

پیش گفتار :


یکی از مهمترین دغدغه های یک تیم برنامه نویسی در زمان پیاده سازی یک پروژه ، اتخاذ روش های مناسب برای تبادل داده بین صفحات ASP.NET و بانک های اطلاعاتی است و هر چه این روش ها مناسب تر باشد سرعت بارگزاری صفحات و در نتیجه رضایت کاربران بالاتر می رود .

جهت آشنایی با بهترین روش ها در پروژه های .NET سایت http://www.asp.net در قسمتی از آموزش هایش به این موضوع تحت عنوان معماری 3 لایه پرداخته است .

یکی از جالب ترین قسمت های این بخش آموزشی (در 4 مقاله 58-59-60-61) است که به کش کردن داده ها پرداخته است. در جاهایی که تراکنش داده ها بسیار بالا است ، همانند سایت هایی که برای ثبت نام دانشگاه ها (در زمان ثبت نام) و ... طراحی می شوند ، جزء مهمترین پارامتر ها است.

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

 

Your browser may not support display of this image.

User کنترلی که در SectionLevelTutorialListing.ascx آماده است را فراخواني كنيد. بدين منظور، این User Control را با درگ کردن ازSolution Explorer  به این صفحه(Default.aspx)اضافه کنید.

Your browser may not support display of this image.

ودر آخر، این صفحات را به فایل 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 به منویی که قبلا ساخته بودیم اضافه شده اند.

Your browser may not support display of this image.

مرحله ی 2:نمایش یک لیست از Product ها در یک صفحه

در این مبحث همانطور که قبلا گفته شد به چگونگی استفاده از ویژگی های cachingداخل( تو کار) کنترل ObjectDataSource می پردازیم. قبل از دیدن این ویژگی ها، یکGridView جهت نشان دادن لیست اطلاعاتProduct بازیابی شده توسط یکobjectDataSource از کلاس ProductBLL به صفحه اضافه مي کنیم.

صفحه ی ObjectDataSource.aspx را در پوشه Caching باز کنید.یک GridView از Toolbox به صفحه اضافه کنید.و ID  آن را با مقدارProducts مقداردهي نماييد و در smart tag مربوط به GridView، آن را به یک کنترلObjectDataSource با نام ProductsDataSourceljwg متصل کنید. ObjectDataSource را به گونه ای پیکربندی کنید که با کلاس ProductsBLL کار کند.

Your browser may not support display of this image. 

برای این که بتوانیم بفهمیم وقتی داده های cache شده در یک ObjectDataSource تغییر می کنند چه اتفاقی رخ می دهد ، یک GridView قابل ویرایش در صفحه ایجاد مي کنیم. drop-down list داخل تب SELECT را با مقدار پیش فرض آن (GetProducts()) مقدار دهی کنید.اما آیتم انتخاب شده در تبUpdate را با متد  UpdateProduct با 3 پارامتر ورودی(productName، unitPrice، productID ) تغییر دهید.

Your browser may not support display of this image.

در آخر، 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”را انتخاب كنيد.

Your browser may not support display of this image.  بعد از اعمال این تغییرات در 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 در دیتابیس  لیست کرده است.

Your browser may not support display of this image.

مرحله ی 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"کنید.

 

Your browser may not support display of this image.

 

در طي گردش كار دستيابي به داده،  رویداد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"نشان داده می شود.

Your browser may not support display of this image.

Your browser may not support display of this image.

به نظر می آید بازیابی داده های دیتابیس در هر 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)را داشته باشد.

Your browser may not support display of this image.

این تغییرات را 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 از دیتابیس اجرا نمی شود.

Your browser may not support display of this image.

هر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 استفاده کنید. 
 

نظرات
افزودنجستجو
تنها کاربران عضو توانايي ارسال نظر را دارند.

Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved.

 
فرستادن :
Mohand.es
Balatarin
Donbale

Ads by ganjineh.co.ir

Creative Commons License
کلیه مقالات پایگاه علمی همکلاسی تحت مجوز Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License منتشر می‌گردد.

Template Designed by : Template Design Workshop
Template name : Hamkelasy Template
Designed by : Template Design Workshop

Template Design Workshop offers professional web templates, flash templates and other web design products available for immediate download.

PictoFX Multimedia Design Group Medium Blog Template Design Workshop
pictofxt