۱۳۸۷/۱۰/۱۱

بدست آوردن اندازه ViewState‌ يك صفحه ASP.Net


يكي از روش‌هاي معمولي كه براي بدست آوردن اندازه ViewState يك صفحه در ASP.Net بكار مي‌رود، نمايش صفحه، مراجعه به سورس آن و سپس ذخيره مقدار فيلد مخفي ViewState به صورت يك فايل متني و مراجعه به اندازه آن فايل است!
راه بهتري هم وجود دارد كه به شرح زير است:
زمانيكه قرار است ViewState به صفحه اضافه شود، روال رخداد گردان SavePageStateToPersistenceMedium اجرا خواهد شد. نحوه تحريف آن براي بدست آوردن اندازه ViewState به صورت زير است (چند سطر زير را به وب فرم خود اضافه كنيد):

using System;
using System.Diagnostics;
using System.IO;
using System.Web.UI;

protected override void SavePageStateToPersistenceMedium(object state)
{
if (Debugger.IsAttached)
{
using (MemoryStream stream = new MemoryStream())
{
LosFormatter formatter = new LosFormatter();
formatter.Serialize(stream, state);
int size = stream.Capacity / 1024;
if (size > 32)
{
throw new Exception("لطفا به وضعيت ويوو استيت اين صفحه رسيدگي نمائيد");
}
}
}
base.SavePageStateToPersistenceMedium(state);
}

در اينجا اگر در حال ديباگ برنامه باشيد و همچنين حجم ViewState از 32 كيلوبايت بيشتر شد، استثنايي جهت گوشزد گردن اين مطلب به شما، توليد مي‌شود.
اگر علاقمند بوديد كه اين روال را به تمامي صفحات اضافه كنيد مي‌شود يك كلاس جديد ايجاد كرد و اين كلاس را از كلاس استاندارد Page به ارث برد ( براي نمونه public class MyPage : Page ) . سپس همان چند سطر فوق را به آن اضافه نمائيد.
اكنون تغييري كه در كدها بايد صورت گيرد به صورت زير است، براي مثال تبديل:

public partial class WebForm4 : System.Web.UI.Page

به :

public partial class WebForm4 : MyPage