مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

بررسی انواع کش Cash در ASP.NET با توضیحات کامل


Caching چیست؟

Caching یک تکنیک ذخیره سازی داده ها/ اطلاعاتی در حافظه هستند که به صورت مکرر مورد استفاده قرار می گیرند ، به طوری که ، هنگامی که برخی از داده ها/ اطلاعات در آینده مورد نیاز باشند ، می توانند به جای این که توسط برنامه کاربردی تولید شوند ، به صورت مستقیم از حافظه بازیابی گردند.

Caching به شدت برای ارتقاء عملکرد ، در ASP.NET مهم است ؛ زیرا صفحات و کنترل ها به صورت پویا در اینجا تولید می شوند. این امر به طور ویژه برای داده های مربوط به تراکنش ها مهم می باشد ، زیرا این داده ها ، از نظر زمان پاسخگویی ، پر هزینه و دارای اهمیت هستند.

فضاهای caching به صورت مکرر در رسانه های دسترسی سریع مانند حافظه دسترسی تصادفی (random access memory) کامپیوتر ، مورد استفاده قرار می گیرند. ASP.NET runtime ، شامل یک نگاشت کلید-مقدار (key0value) از اشیاء CLR به نام cache می باشد. این نگاشت با برنامه کاربردی مستقر می شود و از طریق HttpContext و System.Web.UI.Page در دسترس است.

در برخی از موارد ، caching شبیه به ذخیره سازی اشیاء state می باشد. با این حال ، اطلاعات ذخیره شده در اشیاء state قطعی هستند ، یعنی می توانیم بر روی داده های ذخیره شده در آنجا حساب کنیم ، در حالی که موارد ذخیره شده به صورت caching ، داده ها غیر قطعی هستند.

داده ها در cashing ، در موارد ذیل در دسترس نخواهند بود:

  • اگر lifetime (طول عمر) آنها منقضی شده باشد ،
  • اگر برنامه کاربردی ، حافظه خود را پاک کرده باشد ،
  • اگر عملیات caching به دلایلی انجام نشده باشد.

ما می توانیم به اقلام موجود در cache (حافظه پنهان) با استفاده از یک Indexer دسترسی یابیم و می توانیم lifetime (طول عمر) اشیاء موجود در cache را کنترل کرده و پیوند بین اشیاء کش شده و منابع فیزیکی آنها را تنظیم کنیم.

Caching در ASP.NET

ASP.NET انواع مختلف caching زیر را فراهم می کند:

  • caching خروجی : cache خروجی ، یک کپی از صفحات HTML نهایی رندر شده یا بخشی از صفحات ارسال شده به کلاینت را ذخیره می کند. هنگامی که کلاینت بعدی این صفحه را درخواست می کند ، به جای این که صفحه دوباره تولید شود ، یک کپی کش شده صفحه ارسال می شود ، بنابراین در زمان صرفه جویی می گردد.
  • Caching داده : Caching داده به معنی ذخیره داده ها از یک منبع داده است. تا زمانی که حافظه پنهان منقضی نشده باشد ، درخواست داده ها از حافظه پنهان انجام می شود. هنگامی که حافظه پنهان منقضی می شود ، داده های تازه از طریق منبع داده به دست می آیند و حافظه پنهان دوباره پر می شود.
  • Caching اشیاء : Caching اشیاء ، ذخیره سازی اشیاء موجود در یک صفحه است ، مانند کنترل های مرتبط با داده ها. داده های کش شده در حافظه سرور ذخیره می شوند.
  • Caching کلاس : زمانی که صفحات وب یا سرورهای وب برای اولین بار اجرا می شوند ، ، به یک کلاس page در اسمبلی کامپایل می شوند. سپس ، اسمبلی در سرور کش می شود. دفعه بعد ، هنگامی که یک درخواست برای صفحه یا سرور ساخته می شود ، اسمبلی کش شده مورد ارجاع قرار می گیرد. هنگامی که کد منبع تغییر می یابد ، CRL ، اسمبلی را مجدداً کامپایل می کند.
  • Caching پیکربندی (configuration) : اطلاعات پیکربندی گسترده برنامه کاربردی در یک فایل configuration ذخیره می شود. Caching پیکربندی ، اطلاعات پیکربندی را در حافظه سرور ذخیره می کند.

در این آموزش ، ما caching خروجی ، caching داده و caching شیء را مورد بررسی قرار می دهیم.

Caching خروجی

رندر کردن یک صفحه ممکن است شامل برخی از فرآیندهای پیچیده ای مانند دسترسی به پایگاه داده ، رندر کردن کنترل های پیچیده و غیره باشد. Caching خروجی ، اجازه میان بر زدن به رفت و برگشت ها به سرور از طریق ذخیره کردن داده در حافظه را می دهد. حتی کل صفحه می تواند کش شود.

دایرکتیو OutputCache  مسئول caching خروچی می باشد. این دایرکتیو caching خروجی را فعال می کند و کنترل ویژه ای بر رفتار آن فراهم می کند.

قاعده نوشتاری (syntax) دایرکتیو OutputCache  به صورت زیر است:

<%@ OutputCache Duration="15" VaryByParam="None" %>

این دایرکتیو را زیر دایرکتیو page قرار می دهیم. این کار ، به محیط می گوید که صفحه را برای 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() ، نخ (thread) فرایند را برای مدت معین شده متوقف می کند. در این مثال ، نخ برای 10 ثانیه متوقف می شود ، از این رو ، هنگامی که صفحه برای اولین بار بارگذاری می شود ، این کار 10 ثانیه طول می کشد. با این وجود ، دفعه بعد که صفحه را تازه سازی (refresh) می کنیم ، این کار هیچ زمانی را صرف نمی کند ، زیرا صفحه از حافظه پنهان  بازیابی می شود ، بدون این که بارگذاری گردد.

دایرکتیو OutputCache صفت های زیر را دارا می باشد ، که در کنترل کردن رفتار cache خروجی کمک می کند:

صفت

مقادیر

توضیحات

DiskCacheable

true/false

تعیین می کند که خروجی می تواند در یک دیسک مبتنی بر حافظه پنهان نوشته شود.

NoStore

true/false

تعیین می کند که هدر کنترل حافظه پنهان "no store" ارسال شود یا خیر.

CacheProfile

String name

نام یک پروفایل حافظه پنهان است که در فایل web.config ذخیره می شود.

VaryByParam

None

*

Param- name

لیستی از رشته محدود شده با سیمکالون است ،  که مقادیر رشته پرس و جو را در یک درخواست GET یا متغیری در یک درخواست POST تعیین می کند.

VaryByHeader

*

Header names

لیستی از رشته محدود شده با سیمکالون است ، که هدرهایی که ممکن توسط یک کلاینت ثبت شود، تعیین می کند.

VaryByCustom

Browser

Custom string

به ASP.NET می گوید که کش خروجی توسط نام و ورژن مرورگر یا یک رشته سفارشی تغییر کند.

Location

Any

Client

Downstream

Server

None

Any: صفحه ای که ممکن است در هر کجا کش شود.

Client: محتوای کش شده ، در مرورگر باقی می ماند.

Downstream: محتوای کش شده هم در downstream و هم سرور ذخیره می شود.

Server: محتوای کش شده فقط در سرور ذخیره می شود.

None: کشینگ را غیرفعال می کند.

Duration

Number

مدت ثانیه هایی است که طول می کشد صفحه یا محتوا کش شود.

 

اجازه دهید یک کادر متنی و یک کلید برای مثال قبلی اضافه کنیم و هندلر رویداد را برای کلید بیافزاییم.

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 حاصل می شوند و برای اجرای caching ، خواص به ارث برده شده زیر را دارند:

  • CacheDuration : این خصیصه، تعداد ثانیه هایی که بر اساس آن منبع داده ، داده ها را کش خواهد کرد ، تنظیم می کند.
  • CacheExpirationPolicy : این خصیصه، رفتار کش را هنگامی که داده در کش منقضی می شود، تعریف می کند.
  • ChacheKeyDependency : این خصیصه، یک کلید برای کنترل ها تعریف می کند که به طور خودکار محتوای کش خود را در هنگام پاک شدن، منقضی می سازد.
  • 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' تنظیم می کنیم و صفت Cachedurration را به '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>

کشینگ اشیاء

کشینگ شیء ، انعطاف پذیری بیشتری نسبت به سایر تکنیک های کش فراهم می کند. می توانیم از کشینگ شیء ، برای قرار دادن هر شیئی در حافظه کش استفاده کنیم. این شیء می تواند از هر نوعی باشد - نوع داده، کنترل وب ، کلاس ، یک شیء dataset و غیره. این آیتم به سادگی با اختصاص دادن یک نام کلید جدید، به صورت زیر نمایش داده می شود:

Cache["key"] = item;

ASP.NET نیز متد Insert() را برای وارد کردن یک شیء به کش ارائه می دهد. این متد ، چهار ورژن overhead شده دارد ، که در ادامه نگاهی به آنها می اندازیم.

 

Overhead

توضیحات

Cache.Insert((key, value)

یک آیتم را در حافظه پنهان با نام و مقدار کلید با اولویت و تاریخ انقضای پیش فرض درج می کند.

Cache.Insert(key, value, dependencies)

یک آیتم را در حافظه پنهان با کلید ، مقدار، اولویت پیش فرض، تاریخ انقضا و یک نام CacheDependency که با سایر فایل ها یا موارد دیگر پیوند برقرار می کند ، قرار می دهد. هنگامی که این آیتم های تغییر می یابند، آیتم های کش شده، دیگر معتبر نیستند.

Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration)

این نشان دهنده یک سیاست انقراض همراه با مسائل فوق است.

Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback)

این گزینه، با پارامترهایی همراه است که ما را قادر می سازد تا اولویتی را برای آیتم کش شده و یک نماینده ، که اشاره به یک روش برای فراخوانی در هنگام حذف آیتم دارد ، تعیین کنیم.

 

مثال

یک صفحه با یک کلید و برچسب می سازیم. کدهای زیر را در رویداد Page load می نویسیم:

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

 

 

 

 

فصلِ: 5 , تعداد قسمت ها: 176 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل پس از بررسی سیستم مسیریابی و طراحی صفحه نمایش ویدیو ها، به سراغ پنل کاربری خواهیم رفت و مباحث Model Binding و…

توجه: این دوره آموزشی به صورت پیوسته بر اساس آخرین نسخه ی ASP.NET Core بروزرسانی خواهد شد.   آموزش صفر تا صد طراحی سایت اشتراک ویدیو مشابه آپارات با استفاده از  ASP.NET CORE  MVC 3.0 و V…
فصلِ: 8 , تعداد قسمت ها: 357 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه قصد داریم تا فروشگاه اینترنتی دیجی کالا رو با Asp.Net Core3 پیاده سازی کنیم. ابتدا طراحی قالب دیجی کالا رو به صورت کامل انجام خواهیم داد. در مرحله میریم …
فصلِ: 5 , تعداد قسمت ها: 135 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه آموزشی، با استفاده از جدیدترین تکنولوژی ها و ابزار های مایکروسافت (دات نت)، به یک پروژه جذاب مدیریت آگهی مشابه دیوار می پردازیم. این آموزش در دو بخش کلی و…
فصلِ: 7 , تعداد قسمت ها: 153 , سطح: صفر تا صد
موضوعات: آموزش ASP.NET

این فصل در یک نگاه:

در این دوره به آموزش صفر تا صد جدیدترین نسخه ASP یعنی CORE جدیدترین ورژن خواهیم پرداخت.این آموزش از سطح مقدماتی تا فوق …

دوره آموزش کامل طراحی وب به همراه پروژه ساخت سیستم مدیریت کتابخانه  این دوره  با کور 1 آغاز می شود و در ادامه پروژه به کور 2 تبدیل می شودو پروژه نهایی (سیستم مدیریت کتابخانه) با Asp.net کور…
فصلِ: 1 , تعداد قسمت ها: 5 , سطح: متوسط

این فصل در یک نگاه:

ساخت محیط کاربریآموزش نحوه ی ارسال ایمیل در Asp.net MVCآموزش تنظیمات Gmail برای استفادهاستفاده از Yahooاستفاده از سرویس …

به نام خدا... در خدمتتون هستم با آموزش ارسال ایمیل در Asp.net MVC... ارسال ایمیل یکی از اجزای اصلی ییک سایت به شمار می رود و واقعا سایتی که برای اجزای مختلفش همانند ثبت کاربر جدید و یا ارسال…
فصلِ: 2 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل دوم در یک نگاه:فصل دوم در یک نگاه:…

در این پکیج به مبحث طراحی وب ، در قالب ساخت یک سایت فروشگاهی 5040 به آدرس http://5040.ir می پردازیم که به جرات مشهورترین و یکی از برترین فروشگاه های مجازی در کشور است. در این مجموعه قصد داری…
فصلِ: 4 , تعداد قسمت ها: 78 , سطح: متوسط

این فصل در یک نگاه:

در این دوره آموزشی، وبسایت ورزش3 را با استفاده از ASP.NET Core پیاده سازی می کنیم و همچنین اپ اندروید آن را هم با Xamarin متصل به سرور سایت طراحی و در نهایت نحوه انتشار آن در مارکت هایی مثل …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: متوسط

این فصل در یک نگاه:

کاملترین آموزش هاست و کار با سی پنل.در هنگام خرید سرویس هاست کلمه ای به نام “کنترل پنل” را زیاد خواهید دید آیا تا به حال…

سی پنل یک کنترل پنل هاست محبوب و معروف در جهان و ایران است. در فیلم آموزش سی پنل هم توصیه اکید شده تا افراد مبتدی و حتی افراد حرفه ای از این کنترل پنل هاست سی پنل استفاده کنند. آموزش cpanel …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…
فصلِ: 1 , تعداد قسمت ها: 15 , سطح: متوسط

این فصل در یک نگاه:

رشد و درآمدزایی یک وب سایت یا کسب و کار اینترنتی کاملا به ذوق و مهارت وب مستر یا همان مدیر اصلی وب سایت گره خورده و متاس…

 اصول مدیریت وب سایت برای وب مستر شدن برای موفقیت یک وب سایت لازم الاجراست. زیرا شما دوست دارید وب سایت خود را به کارخانه پولسازی تبدیل کنید. این واقعیت رویا نیست. هرکس این اصول را بداند به …

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید