بدست آوردن اندازه 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


  • #
    ‫۱۵ سال و ۱۰ ماه قبل، پنجشنبه ۱۲ دی ۱۳۸۷، ساعت ۰۲:۴۱
    میشه یک توضیح درباره رویداد SavePageStateToPersistenceMedium اینجا بنویسید .
  • #
    ‫۱۵ سال و ۱۰ ماه قبل، پنجشنبه ۱۲ دی ۱۳۸۷، ساعت ۰۲:۴۹
    هدف اصلی از معرفی این روال رویدادگردان این است که شما بتونید یک ViewState manager سفارشی برای خودتون تهیه کنید. یعنی چی؟
    در روال SavePageStateToPersistenceMedium کل ViewState‌ ایی که قرار است به صفحه به صورت یک فیلد مخفی اضافه شود دراختیار شما خواهد بود. برای مثال آن‌را در دیتابیس ذخیره کنید. دیگر هیچ مقداری به فیلد مخفی ViewState اضافه نمی‌شود.
    حالا در روال رویدادگردان LoadPageStateFromPersistenceMedium این ViewState ذخیره شده در دیتابیس را بازیابی کنید و مقدار آنرا بازگشت دهید.
    به این صورت صفحه سبک می‌شود. ViewState هم در سمت سرور قابل ذخیره شدن خواهد بود.
    برای مثال مقاله زیر از سشن برای حذف ViewState‌ استفاده کرده :
    http://www.dotnetjunkies.com/WebLog/whoiskb/archive/2005/06/23/128346.aspx
  • #
    ‫۱۵ سال و ۱۰ ماه قبل، پنجشنبه ۱۲ دی ۱۳۸۷، ساعت ۰۳:۵۹
    اینو می دونیم که هنگام پستبک یک صفحه باید ویو استیت به سرور آپلود شود که این مستلزم زمان و هزینه است.
    آیا امکان فشرده سازی استیت، برای کاهش حجم ارسالی آن وجود دارد؟
  • #
    ‫۱۵ سال و ۱۰ ماه قبل، پنجشنبه ۱۲ دی ۱۳۸۷، ساعت ۰۴:۴۶
    یک نمونه فشرده سازی ViewState سازگار با ASP.Net Ajax
    http://blog.sb2.fr/post/2008/11/18/Ajax-Enabled-ViewState-Compression-for-ASPNET.aspx
  • #
    ‫۱۵ سال و ۱۰ ماه قبل، یکشنبه ۱۵ دی ۱۳۸۷، ساعت ۰۳:۰۵
    مرسی از جوابتون البته مقاله french بود که زحمت ترجمه رو دادم به سرویس translate گوگل.
    راستی آقای نصیری به نظرم جای Ajax تو برجسب ها خالیه. فکر کنم بقیه دوستان هم خوشحال می شن اگه راجب ajax از شما بشنوند!
    مگه نه بچه ها؟