Просто перший удар по цьому, використовується деякі класи, які я використовував в іншому проекті (я стверджую код стиснення пізніше ... я думаю, я отримав його з sprapziplib caption - з деякими змінами - я пов' яжу заголовки коментарів, щоб пізніше виконати дії Licensing - зараз вважати це лише прикладом) справжній код для стискання області перегляду дуже простий:
using System;
using System.Web.UI;
using System.IO;
namespace ViewStateCompression
{
///
/// Summary description for CompressedVSBasePage.
///
public class CompressedVSBasePage :System.Web.UI.Page
{
private LosFormatter _formatter = new LosFormatter();
protected override void SavePageStateToPersistenceMedium(object viewState)
{
StringWriter sw = new StringWriter();
_formatter.Serialize(sw, viewState);
ComDePress cmp = new ComDePress();
string outStr = cmp.Compress(sw.ToString());
Page.RegisterHiddenField("__COMPRESSEDVIEWSTATE",outStr);
}
protected override object LoadPageStateFromPersistenceMedium()
{
string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];
string outStr = new ComDePress().DeCompress(vsString);
return _formatter.Deserialize(outStr);
}
}
}
Щоб скористатися цією можливістю, просто успадкуйте з цієї сторінки замість звичайної системи. Web. UI.Page. Очевидно, що ви втрачаєте деякі з звичайних функцій View State, зокрема шифрування, але ці функції буде просто повернути у... у поточній версії ви побачите досить великі заощадження у розмірі ViewState від використання цього стискання - використання BZip2 - оскільки це код, про який я говорив..., будь ласка, спробуйте його. Будь- які коментарі, як і завжди, оцінюються.
Я зробив Тестовий проект для гри з цим Це VSNET 2003, він має все необхідне (включаючи стиснення).
UPDATE: Просто проводили деякі тестування з цим... як приклад, використовуючи DataSetened з "Select" * From Orders ' of Northwind DB прив' язаний до типового DataGrid (Я вибрав цей варіант як свинячий...), я переходжу з 659984 байтів на моєму полі зору до 52080 байтів... близько 92% - які, на мою думку, є досить вражаючими! Я впевнений, що є деякі недоліки до цього (поза винятком декількох додаткових циклів, потрібних для стиснення) - але чи існує якась справжня причина, чому MS не надає параметр стиснення для ViewState out-box - any?
Гаразд, для тих, хто критикував код... це ПРОТО ТЕЛЕФОР, просто щоб перевірити ідею, я планую погратися з цим трохи більше в якийсь момент і буде розглядатися, включаючи деякі смішні риси, такі як Переглядач ViewState Denis Bauer Вбудований, різні системи стиснення, різні шифрування - включаючи неймовірно ефективні Дві рибки- коротше кажучи, це буде іграшка для мене, щоб подивитися і розширити поточну реалізація ViewState.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.