آشنایی با Session , ViewState و Caching در Asp.Net

ئر این مقاله با Session , ViewState و Caching در Asp.Net و نحوه کار آنها آشنا می شویم .

امروزه توسعه دهندگان وب با Asp.Net و MVC کار میکنند , اما نمی توانند سه امکان Viewstate و Session و Cashing را در Asp.net کلاسیک فراموش کنند .

ViewState

Viewstate به خودی خود وجود خارجی ندارد , اما اطلاعات  به صورت مخفی که در صفحه Asp.Net قرار دارد می تواند در "Viewstate_" قرار بگیرد . viewstate تغییرات در وب سایت را در مدت Postback  می تواند پی گیری کند .

viewstate موجود در صفحه را می توانیم در قسمت view source صفحه مشاهده کنیم , برای این کار در زمان اجرا روی صفحه راست کلیک کنید , سپس View Source را انتخاب می کنیم .

تگ مربوط به ViewState مانند کد زیر میباشد :


    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=""></input>  

یک ViewState حجیم باعث کاهش سرعت دانلود در سمت کاربر می شود. زمانی که کاربر بر روی دکمه کلیک می کند و postback اتفاق می افتد , تمام اطلاعات موجود در viewstate به سمت سرور  با سرعت کمتری انتقال می یابند و حالا فرض کنید که یک کاربر با سرعت اینترنت Dial-Up بخواهد این درخواست ها را به سمت سرور ارسال نماید .اگر ارسال درخواست و بارگزاری صفحه چند دقیقه به طول بیانجامد احتمال زیاد کاربر نا امید و از ادامه کار منصرف میشود .

لطفاً شرایط زیر را در نظر بگیرید :

 - به صورت پیش فرض View State در همه کنترل های Asp.net موجود می باشد .

- viewstate شامل کنترلهای asp نمی باشد بلکه شامل محتوای آن کنترلها می باشد , همچنین می تواند ID مربوط به کنترلها را در خود قرار دهد , اطلاعات موجود در viewstate با بارگزاری مجدد صفحه خالی میشود زیرا با محتوای فرم ارسال نمی شود .

- ViewState برای نگهداری اطلاعات Session به کار نمی رود , همجنین قادر به انتقال اطلاعات بین صفحات نمیباشد .

- Viewstate قادر به بازسازی کنترلهای پویا در داخل صفحه نمی باشد .

- ViewState قادر به ذخیره اطلاعات در کنترل پس از عمل Postback نمی باشد .

 

Session

session برای انتقال اطلاعات در یک بازه زمانی مشخص بین Web Application و کاربر استفاده میشود .هر کاربر Session منحصر بفرد خود را دارد .آیتم ها یا متغیرها می توانند در Session  برای کاربر قرار بگیرند .همچنین Session امکان نگهداری اطلاعات کلیدی برای دسترسی به  اطلاعات مربوط  به آن کلید را دارند .ما این عمل را می توانیم به عنوان دسترسی غیر مستقیم و امن به اطلاعات جداول در نظر بگیریم .هر کاربر معرف یک Key node متفاوت برای شناسایی مقادیر منحصربفرد میباشد .مقادیر Session از طریق نرم افزار قابل حذف شدن می باشد , که این در خاصیت Web Config پروژه تعریف می شود و به صورت پیش فرض 20 دقیقه میباشد که قابل تغییر میباشد .

مقادیر Session می توانند بر روی سرور ذخیره شوند و همچنین هر نوع داده یا  Refrence را می تواند در Session قرار بگیرد .این امکان مشابه مقادیر عمومی (global variables ) در Windows Application و Http Cookies میباشد که میتوان کلید مربوط به هر فیلد را در آن قرار داد و در جایی دیگر به اطلاعات مربوط به آن فیلد دسترسی داشته باشیم . مجموعه مقادیر Session با نام یا عدد میتواند نمایه سازی شود , همچنین احتیاج به تعریف مشخص مقادیر به مجموعه نمی باشد .

برای درک بهتر امکان Session به مثال زیر  لطفا توجه  کنید :

Session["firstName"] = "Gaurav" //User's first name  
Session["lastName"] = "Arora" //User's last name  
// Clear the session variable  
Session["FirstName"] = null;  
//Clear all Session variables  
Session.Abandon(); 

به صورت پیش فرض Session در تمامی Application های موجود در Asp.net فعال میباشد .

Caching

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

اکنون در قسمتی که کاربر به صفحات Asp.Net دسترسی دارد توجه کنید .اساساً دو راه برای دسترسی به اطلاعاتی که به آنها نیاز داریم وجود دارد .همچنین میتوانیم اطلاعات موجود در صفحات Asp را از داخل نرم افزار بدست بیاوریم .

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

حالا فرض کنید اطلاعات ارسال شده به مرورگر را بخواهیم به دست بیاوریم , می توان حدس زد که با چه سرعتی می توانیم اطلاعات را به دست می آوریم .

Asp انواع caching را مه در زیر به آنها اشاره شده پشتیبانی کند :

Page Output Caching : که در تمام صفحات اطلاعات را cash می کند .

Partial Page Caching  : شما می توانید فقط قسمتی از صفحه را cash کنید که با این کار مشکل cash کردن کل صفحه را می توانیم برطرف سازیم .

DataSource Caching  : شما می توانید بانک اطلاعاتی را نیز Cach کنید که شامل کنترلهای مختلف Asp میباشد از قبیل SqlDataSource , ObjectDataSource

Data Caching  :در آخر cash اطلاعات که یک مکانیزم اساسی در cash کردن میباشد .در پشت صحنه تمام انواع cash ها از همین الگوریتم Data Cash استفاده می کنند .شما با استفاده از این روش می توانید اطلاعات دلخواه  را از حافظه بدست بیاورید .به عنوان مثال شما میتوانید از این روش برای cash کردن یک DataSet در چند صفحه از یک نرم افزار استفاده کنید .

نکته : مقادیر cash شده قابلیت انقظا شدن دارند که ما را قادر میسازد در فواصل مختلف به اطلاعات موجود در حافظه دسترسی داشته باشیم.

مانند مثال بالا می توانیم انقضای cach را هر دوساعت تعریف کنیم که در طول روز هر 2 ساعت یکبار cach انجام شود .مانند مثال زیر :


    public void AddItemToCache(Object sender, EventArgs e)  
    {  
    itemRemoved = false;  
    onRemove = new CacheItemRemovedCallback(this.RemovedCallback);  
    if (Cache["Key1"] == null)  
    Cache.Add("Key1", "Value 1", null, DateTime.Now.AddSeconds(60),TimeSpan.Zero, CacheItemPriority.High, onRemove);  
    }  
    public void RemoveItemFromCache(Object sender, EventArgs e)  
    {  
    if(Cache["Key1"] != null)  
    Cache.Remove("Key1");  
    }