1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

ذخیره سازی داده ها ASP.NET-Data Caching

شروع موضوع توسط AftabGardoon ‏8/2/19 در انجمن ASP.NET

Tags:
  1. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ذخیره سازی داده ها / Data Caching- ASP.NET
    Cachingها عبارتند از ذخیره سازی داده/اطلاعات پرکاربرد (اطلاعاتی که به طور مکرر مورد استفاده قرار می گیرند) در حافظه. تکنیک مزبور برای این پیاده می شود که در صورت نیاز پیدا کردن به اطلاعات پرکاربرد دیگر نیازی نباشد که داده ها مجددا توسط برنامه (application) ایجاد شود بلکه بتوان آن ها به طور مستقیم از حافظه بازیابی کرد.


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


    Caching به خصوص در رابطه با بازیابی اطلاعات مربوط به تراکنش ها بسیار مفید و کارامد محسوب می شود، زیرا که این عملیات از لحاظ مدت زمانی که طول می کشد تا response ارائه گردد بسیار سنگین و زمان بر محسوب می شوند.


    Caching دادهایی که به طور مکرر مورد استفاده قرار می گیرند را در وسیله های در دسترس مانند RAM رایانه جای گذاری و ذخیره می کند. ASP.NET runtime دربردارنده ی یک نما یا نقشه ی جفت کلید-مقدار از اشیا CLR می باشد که Cache (حافظه ی نهان) خوانده می شود. cache در application مقیم بوده و از طریق کلاس HttpContext و System.Web.UI.Page قابل دسترسی می باشد.


    از جهاتی، caching مشابه ذخیره سازی state object ها است. با این حال ذخیره سازی اطلاعات در state object ها قطعی است به این معنا که شما از ذخیره ی اطلاعات درون state object ها مطمئن هستید اما caching (ذخیره سازی موقت) کاملا قطعی نیست.


    در موارد زیر فهرست شده، داده قابل دسترسی نمی باشد:


    • در صورتی که چرخه ی حیات (lifetime) آن تمام (منقضی) شده باشد
    • در صورتی که application حافظه ی خود را آزاد کند
    • در صورت رخ ندادن caching به هر دلیلی

    می توانید با استفاده از indexer (شاخص زن) به آیتم های ذخیره شده در cache (حافظه ی نهان) دسترسی پیدا کرده و نیز چرخه ی حیات اشیا را مدیریت کنید. همچنین این امکان برای شما وجود دارد که بین اشیا ذخیره شده در حافظه ی نهان (cached objects) و منبع فیزیکی آن ها لینک ایجاد کنید.
     
  2. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ذخیره سازی داده ها به صورت موقت در ASP.NET
    ASP.NET از انواع مختلف caching پشتیبانی می کند که زیر برای شما شرح داده شده:


    • Output Caching: یک نسخه ی عینی (copy) از صفحات یا قسمتی از صفحات نهایی و render شده ی HTML که به سرویس گیرنده (client) ارسال شده را ذخیره می کند. هنگامی که کلاینت بعدی صفحه را درخواست می کند، بجای بازسازی (تولید مجدد) صفحه، یک نسخه ی ذخیره شده از صفحه فرستاده می شود و از این رو در زمان صرفه جویی قابل توجهی صورت می گیرد.
    • Data Caching: به معنای ذخیره ی موقت اطلاعات از یک منبع داده است. مادام اینکه cache منقضی نشده، داده ی درخواست شده از حافظه ی نهان (cache) بازیابی می شود. هنگامی که cache منقضی شده یا مدت آن کاملا سر می آید، داده های جدید از منبع داده گرفته شده و حافظه ی نهان مجددا از داده پر می شود.
    • Object Caching: به ذخیره سازی اشیا در یک صفحه گفته می شود، از جمله ی آن می توان به کنترل های data-bound اشاره کرد. داده هایی که به طور موقت ذخیره می گردند (cached data)، در حافظه ی سرور نگه داری می شوند.
    • Class Caching: صفحات یا سرویس های وب هنگامی که برای اولین بار اجرا می گردند داخل assembly ،درون یک کلاس Page کامپایل شده، سپس اسمبلی به طور موقت داخل سرور ذخیره می شود. دفعه ی بعدی که صفحه یا سرویس مورد نظر درخواست می شود، به assembly ذخیره شده در سرور ارجاع داده می شود. به محض اینکه source code تغییر می کند، CLR اسمبلی را مجددا کامپایل می کند.
    • Configuration Caching: اطلاعات پیکربندی مربوط به کل application داخل فایل پیکربندی (configuration file) ذخیره می شود. Configuration caching در واقع اطلاعات پیکربندی را داخل حافظه ی server ذخیره می کند.

    در این مبحث تنها به تشریح output caching، data cachingو object caching می پردازیم.
     
  3. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    Output Caching

    rendering (ارائه ی ماشینی) یک صفحه ممکن است شامل فرایند های سنگین و پیچیده ای همچون دسترسی به پایگاه داده، render کردن کنترل های مرکب و پیچیده باشد. output caching با ذخیره سازی موقت اطلاعات داخل حافظه از دانلود یا درخواست مجدد اطلاعات از سرور (درخواست تکراری برای دریافت اطلاعات به سرور) جلوگیری می کند. حتی امکان ذخیره ی کل یک صفحه نیز وجود دارد.


    OutputCache directive مسئول output caching می باشد. directive ذکر شده قابلیت output caching را فعال سازی کرده و به برنامه نویس امکان می دهد عملکرد آن را تا حدی کنترل کند.
     
  4. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    دستور نگارش (syntax) directive به شرح زیر می باشد:

    کد:
    < %@ OutputCache Duration="15" VaryByParam="None" % >
     
  5. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    Directive فوق را زیر page directive درج کنید. با این کار به محیط می فهمانید که باید صفحه را به مدت 15 ثانیه نگه دارد (ذخیره کند). با استفاده از event handler زیر برای رخداد page load می توان بررسی کرد آیا صفحه به درستی ذخیره می شود یا خیر.

    کد:
    protected void Page_Load(object sender, EventArgs e)
            {
                Thread.Sleep(10000);
                Response.Write("This page was generated and cache at:" +
                DateTime.Now.ToString());
            }
     
  6. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    متد Thread.Sleep() نخ (thread) جاری را به مدت زمان مشخصی (برای چند هزارم ثانیه) به حالت تعلیق در می آورد. در این مثال نخ به مدت 10 ثانیه متوقف می شود، بنابراین هنگامی که صفحه برای اولین بار بارگذاری می شود، چیزی حدود 10 ثانیه بارگذاری آن طول می کشد. اما دفعه ی بعدی که صفحه را بروز رسانی (refresh) می کنید، صفحه بلافاصله (بدون اتلاف وقت) بالا می آید، زیرا که صفحه بدون نیاز به بارگذاری مجدد و مستقیما از سرور بازیابی می شود.
     
  7. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    OutputCache directive دارای خصیصه های (attribute) زیر می باشد که در مدیریت و کنترل عملکرد output caching کمک شایان توجهی می کند:

    [​IMG]
     
  8. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    حال یک کنترل textbox و button به مثال قبلی اضافه می کنیم. در مرحله ی بعد event handler زیر را برای کنترل button بکار می بریم.
    کد:
    protected void btnmagic_Click(object sender, EventArgs e)
            {
                Response.Write("< br >< br >");
                Response.Write("< h2 > Hello, " + this.txtname.Text + "< /h2 >");
            }
     
  9. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    OutputCache directive را اصلاح کنید:

    کد:
    < %@ OutputCache Duration="60" VaryByParam="txtname" % >
    به هنگام اجرای صفحه، ASP.NET صفحه را بر مبنای اسمی که داخل textbox وارد شده بود موقتا ذخیره (cache) می کند.
     
  10. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    Data Caching
    مهمترین جنبه ی data caching ذخیره سازی کنترل های داده (data source control) در حافظه ی نهان می باشد. همان طور که پیشتر ذکر شد کنترل های داده (data source controls) نمایشگر داده های موجود در منبع داده هستند، از جمله ی آن ها می توان به فایل XML و یا یک پایگاه داده اشاره کرد. کنترل های ذکر شده از کلاس انتزاعی DataSourceControl مشتق شده و همچنین دارای خاصیت های (property) به ارث برده ی زیر می باشند که در پیاده سازی caching کمک می کنند:


    • CacheDuration- این خاصیت مدت زمانی (تعداد ثانیه) که منبع داده (data source) اطلاعات را به طور موقت ذخیره (cache) می کند، تعیین می کند.
    • CacheExpirationPolicy – عملکرد یا رفتار حافظه ی نهان را به هنگام سر آمدن (منقضی شدن) مدت ذخیره ی داده های موجود در cacheرا تعریف می کند.
    • CacheKeyDependency – این خاصیت یک کلید برای کنترل ها تعریف می کند که در صورت پاک شدن آن به صورت خودکار محتویات حافظه ی نهان را نیز پاک (منقضی) می کند.
    • EnableCaching – تعیین می کند آیا داده ها به طور موقت (در حافظه ی نهان) ذخیره شوند یا خیر.