ASP.NET - ذخیره داده ها

Caching چیست؟کش کردن یک تکنیک ذخیره سازی داده ها/اطلاعات پرکاربرد در حافظه است، به طوری که، زمانی که دفعه بعد به همان داده/اطلاعات نیاز است، به جای تولید توسط برنامه، بتوان مستقیماً از حافظه بازیابی شود.حافظه پنهان برای افزایش عملکرد در ASP.NET بسیار مهم است، زیرا صفحات و کنترل ها به صورت پویا در اینجا تولید می شوند. این امر به ویژه برای تراکنش های مرتبط با داده مهم است، زیرا از نظر زمان پاسخ گران هستند.ذخیره‌سازی مکان‌هایی که داده‌های پرکاربرد را در رسانه‌هایی با دسترسی سریع مانند حافظه دسترسی تصادفی رایانه انجام می‌دهند. زمان اجرا ASP.NET شامل یک نقشه کلید-مقدار از اشیاء CLR به نام کش است. این مربوط به برنامه است و از طریق HttpContext و System.Web.UI.Page در دسترس است.از برخی جهات، کش کردن شبیه به ذخیره اشیاء حالت است. با این حال، ذخیره اطلاعات در اشیاء حالت قطعی است، یعنی می‌توانید روی داده‌هایی که در آنجا ذخیره می‌شوند حساب کنید، و ذخیره داده‌ها غیر قطعی است.داده ها در موارد زیر در دسترس نخواهد بود:اگر عمر آن به پایان برسد،اگر برنامه حافظه خود را آزاد کند،اگر کش به دلایلی انجام نشود.شما می توانید با استفاده از یک نمایه ساز به موارد موجود در حافظه پنهان دسترسی داشته باشید و ممکن است طول عمر اشیاء موجود در حافظه پنهان را کنترل کنید و پیوندهایی را بین اشیاء کش و منابع فیزیکی آنها تنظیم کنید.ذخیره سازی در ASP.NetASP.NET انواع مختلف کش زیر را ارائه می دهد:حافظه پنهان خروجی: حافظه پنهان خروجی یک کپی از صفحات HTML نهایی ارائه شده یا بخشی از صفحات ارسال شده به مشتری را ذخیره می کند. هنگامی که مشتری بعدی برای این صفحه درخواست می کند، به جای ایجاد مجدد صفحه، یک نسخه کش شده از صفحه ارسال می شود و در نتیجه در زمان صرفه جویی می شود.حافظه پنهان داده: ذخیره داده به معنای ذخیره داده ها از یک منبع داده است. تا زمانی که کش منقضی نشده باشد، درخواست داده از کش انجام می شود. هنگامی که حافظه نهان منقضی می شود، داده های تازه توسط منبع داده به دست می آید و کش دوباره پر می شود.Object Caching: کش کردن اشیاء در حافظه پنهان اشیاء موجود در یک صفحه، مانند کنترل‌های محدود به داده، ذخیره می‌شود. داده های کش شده در حافظه سرور ذخیره می شود.ذخیره کلاس: صفحات وب یا سرویس های وب در یک کلاس صفحه در اسمبلی، زمانی که برای اولین بار اجرا می شوند، کامپایل می شوند. سپس اسمبلی در سرور ذخیره می شود. دفعه بعد که درخواستی برای صفحه یا سرویس ارائه می شود، اسمبلی کش ارجاع داده می شود. هنگامی که کد منبع تغییر می کند، CLR اسمبلی را دوباره کامپایل می کند.ذخیره سازی پیکربندی: اطلاعات پیکربندی گسترده برنامه در یک فایل پیکربندی ذخیره می شود. کش پیکربندی اطلاعات پیکربندی را در حافظه سرور ذخیره می کند.در این آموزش، کش خروجی، کش داده ها و کش کردن اشیا را در نظر خواهیم گرفت.ذخیره خروجیارائه یک صفحه ممکن است شامل برخی از فرآیندهای پیچیده مانند دسترسی به پایگاه داده، رندر کردن کنترل های پیچیده و غیره باشد. کش خروجی امکان دور زدن رفت و آمدهای رفت و برگشت به سرور با ذخیره داده ها در حافظه را فراهم می کند. حتی کل صفحه را می توان کش کرد.دستور OutputCache وظیفه ذخیره سازی خروجی را بر عهده دارد. ذخیره خروجی را فعال می کند و کنترل خاصی بر رفتار آن فراهم می کند.دستور دستور OutputCache:<%@ OutputCache Duration="15" VaryByParam="None" %>این دایرکتیو را زیر صفحه دایرکتیو قرار دهید. این به محیط می گوید که صفحه را به مدت 15 ثانیه کش کند. کنترل کننده رویداد زیر برای بارگذاری صفحه به آزمایش اینکه صفحه واقعاً کش است کمک می کند.protected void Page_Load(object sender, EventArgs e){ Thread.Sleep(10000); Response.Write("This page was generated and cache at:" + DateTime.Now.ToString());}متد ()Thread.Sleep رشته فرآیند را برای مدت زمان مشخص متوقف می کند. در این مثال، موضوع به مدت 10 ثانیه متوقف می شود، بنابراین وقتی صفحه برای اولین بار بارگذاری می شود، 10 ثانیه طول می کشد. با این حال، دفعه بعد که صفحه را به‌روزرسانی می‌کنید، زمان نمی‌برد، زیرا صفحه بدون بارگیری از حافظه پنهان بازیابی می‌شود.دستور OutputCache دارای ویژگی های زیر است که به کنترل رفتار حافظه پنهان خروجی کمک می کند:توصیف مقادیر ویژگیDiskCacheable true/false مشخص می کند که خروجی می تواند در حافظه پنهان مبتنی بر دیسک نوشته شود.NoStore true/false مشخص می کند که سربرگ کنترل کش "no store" ارسال شود یا خیر.CacheProfile نام رشته نام نمایه کش که در web.config ذخیره می شود.VaryByParamهیچ یک*لیست رشته محدود شده با نقطه ویرگول نام پارامتر، مقادیر رشته پرس و جو را در یک درخواست GET یا متغیر در یک درخواست POST مشخص می کند.VaryByHeader*نام سرصفحه هالیست رشته ها با نقطه ویرگول مشخص می کند که ممکن است توسط مشتری ارسال شود.VaryByCustomمرورگررشته سفارشیبه ASP.NET می‌گوید حافظه پنهان خروجی را بر اساس نام مرورگر و نسخه یا یک رشته سفارشی تغییر دهد.محلهرمشتریپایین دستسرورهیچ یکهر: صفحه ممکن است در هر جایی ذخیره شود.مشتری: محتوای کش در مرورگر باقی می ماند.Downstream: محتوای کش ذخیره شده در پایین دست و سرور هر دو.سرور: محتوای کش که فقط در سرور ذخیره می شود.هیچ: ذخیره کش را غیرفعال می کند.تعداد مدت زمان تعداد ثانیه هایی که صفحه یا کنترل در حافظه پنهان ذخیره می شود.اجازه دهید یک جعبه متن و یک دکمه را به مثال قبلی اضافه کنیم و این کنترل کننده رویداد را برای دکمه اضافه کنیم.protected void btnmagic_Click(object sender, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> Hello, " + this.txtname.Text + "</h2>");}دستور OutputCache را تغییر دهید:<%@ OutputCache Duration="60" VaryByParam="txtname" %>هنگامی که برنامه اجرا می شود، ASP.NET صفحه را بر اساس نام موجود در کادر متن ذخیره می کند.ذخیره داده هاجنبه اصلی ذخیره‌سازی داده، ذخیره کردن کنترل‌های منبع داده است. قبلاً بحث کرده‌ایم که کنترل‌های منبع داده، داده‌ها را در یک منبع داده مانند یک پایگاه داده یا یک فایل XML نشان می‌دهند. این کنترل‌ها از کلاس انتزاعی DataSourceControl مشتق شده‌اند و دارای ویژگی‌های ارثی زیر برای پیاده‌سازی کش هستند:CacheDuration - تعداد ثانیه هایی را که منبع داده داده ها را در حافظه پنهان ذخیره می کند را تعیین می کند.CacheExpirationPolicy - رفتار کش را زمانی که داده های موجود در حافظه نهان منقضی شده است تعریف می کند.CacheKeyDependency - کلیدی را برای کنترل‌ها مشخص می‌کند که پس از حذف، محتوای حافظه پنهان خود را به‌طور خودکار منقضی می‌کند.EnableCaching - مشخص می کند که داده ها کش شوند یا نه.مثالبرای نمایش کش داده ها، یک وب سایت جدید ایجاد کنید و یک فرم وب جدید روی آن اضافه کنید. یک کنترل SqlDataSource با اتصال پایگاه داده که قبلاً در آموزش های دسترسی به داده استفاده شده است اضافه کنید.برای این مثال، یک برچسب به صفحه اضافه کنید که زمان پاسخگویی صفحه را نشان می دهد.<asp:Label ID="lbltime" runat="server"></asp:Label>پبه غیر از برچسب، صفحه محتوا مانند آموزش دسترسی به داده است. یک کنترل کننده رویداد برای رویداد بارگذاری صفحه اضافه کنید:protected void Page_Load(object sender, EventArgs e){ lbltime.Text = String.Format("Page posted at: {0}", DateTime.Now.ToLongTimeString());}صفحه طراحی شده باید به شکل زیر باشد:هنگامی که صفحه را برای اولین بار اجرا می کنید، هیچ اتفاق متفاوتی نمی افتد، برچسب نشان می دهد که هر بار که صفحه را به روز می کنید، صفحه مجددا بارگذاری می شود و زمان نشان داده شده روی برچسب تغییر می کند.در مرحله بعد، ویژگی EnableCaching کنترل منبع داده را روی "true" تنظیم کنید و ویژگی Cacheduration را روی "60" تنظیم کنید. کش را اجرا می کند و کش هر 60 ثانیه منقضی می شود.مهر زمانی با هر بار تازه سازی تغییر می کند، اما اگر داده های جدول را در این 60 ثانیه تغییر دهید، قبل از منقضی شدن حافظه پنهان نشان داده نمی شود.asp:SqlDataSource ID = "SqlDataSource1" runat = "server" ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.ProviderName %>" SelectCommand = "SELECT * FROM [DotNetReferences]" EnableCaching = "true" CacheDuration = "60"> </asp:SqlDataSource>ذخیره شیکش اشیاء انعطاف پذیری بیشتری نسبت به سایر تکنیک های کش فراهم می کند. شما می توانید از کش کردن شی برای قرار دادن هر شی در حافظه پنهان استفاده کنید. شی می تواند از هر نوع باشد - یک نوع داده، یک کنترل وب، یک کلاس، یک شی مجموعه داده و غیره. آیتم به سادگی با اختصاص یک نام کلید جدید به حافظه پنهان اضافه می شود، که به صورت زیر نشان داده شده است:Cache["key"] = item;ASP.NET همچنین متد Insert() را برای درج یک شی در حافظه پنهان فراهم می کند. این روش دارای چهار نسخه اضافه بار است. بگذارید آنها را ببینیم:توضیحات اضافه بارCache.Insert((key, value)؛ آیتمی را با نام و مقدار کلید با اولویت و انقضای پیش فرض در حافظه پنهان درج می کند.Cache.Insert (کلید، مقدار، وابستگی ها)؛ یک مورد را با کلید، مقدار، اولویت پیش‌فرض، انقضا و نام CacheDependency که به فایل‌ها یا آیتم‌های دیگر پیوند می‌دهد، در حافظه پنهان قرار می‌دهد تا زمانی که این موارد تغییر می‌کنند، مورد حافظه پنهان دیگر معتبر باقی نمی‌ماند.Cache.Insert(کلید، مقدار، وابستگی ها، absoluteExpiration، slidingExpiration)؛ این نشان دهنده یک خط مشی انقضا همراه با موارد فوق است.Cache.Insert(کلید، مقدار، وابستگی ها، absoluteExpiration، slidingExpiration، priority، onRemoveCallback)؛ این به همراه پارامترها همچنین به شما این امکان را می دهد که اولویتی را برای آیتم حافظه پنهان و یک نماینده تعیین کنید که به روشی اشاره می کند که باید هنگام حذف آیتم فراخوانی شود.انقضای لغزشی برای حذف یک مورد از حافظه پنهان زمانی که برای بازه زمانی مشخص استفاده نمی شود استفاده می شود. قطعه کد زیر یک مورد را با انقضای کشویی 10 دقیقه بدون وابستگی ذخیره می کند.Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));مثالیک صفحه فقط با یک دکمه و یک برچسب ایجاد کنید. کد زیر را در رویداد بارگذاری صفحه بنویسید: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/>";}هنگامی که صفحه برای اولین بار بارگذاری می شود، می گوید:Page Created.Creating test item.Storing test item in cache for 30 seconds.اگر در عرض 30 ثانیه دوباره روی دکمه کلیک کنید، صفحه به عقب ارسال می‌شود اما کنترل برچسب اطلاعات خود را از حافظه پنهان مطابق شکل دریافت می‌کند:Page Posted Back.Retrieving test item.Test item is: 14-07-2010 01:25:04