# ViewState- стискання за допомогою BZip2... latest прототипу...

<datetime class="hidden">2004-02-29T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, ASP.NET, Performance -->
Просто перший удар по цьому, використовується деякі класи, які я використовував в іншому проекті (я стверджую код стиснення пізніше ... я думаю, я отримав його з [sprapziplib](http://www.icsharpcode.net/OpenSource/SharpZipLib/) 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 - оскільки це код, про який я говорив..., будь ласка, спробуйте його. Будь- які коментарі, як і завжди, оцінюються.

Я зробив [Тестовий проект для гри з цим](/uploads/ViewStateCompression.zip) Це VSNET 2003, він має все необхідне (включаючи стиснення).

UPDATE: Просто проводили деякі тестування з цим... як приклад, використовуючи DataSetened з "Select" \* From Orders ' of Northwind DB прив' язаний до типового DataGrid (Я вибрав цей варіант як свинячий...), я переходжу з 659984 байтів на моєму полі зору до 52080 байтів... близько 92% - які, на мою думку, є досить вражаючими! Я впевнений, що є деякі недоліки до цього (поза винятком декількох додаткових циклів, потрібних для стиснення) - але чи існує якась справжня причина, чому MS не надає параметр стиснення для ViewState out-box - any?

Гаразд, для тих, хто критикував код... це ПРОТО ТЕЛЕФОР, просто щоб перевірити ідею, я планую погратися з цим трохи більше в якийсь момент і буде розглядатися, включаючи деякі смішні риси, такі як [Переглядач ViewState Denis Bauer](http://www.denisbauer.com/ASPNETControls.aspx) Вбудований, різні системи стиснення, різні шифрування - включаючи неймовірно ефективні [Дві рибки](http://www.codeproject.com/csharp/twofish_csharp.asp)- коротше кажучи, це буде іграшка для мене, щоб подивитися і розширити поточну реалізація ViewState.