# ViewState pakkaus BZip2...myöhempi prototyyppi...

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

<!-- category -- mostlylucidcouk, Imported, ASP.NET, Performance -->
Vain ensimmäinen puukotus tässä, käyttää joitakin kursseja käytin toisessa projektissa (määritän pakkauskoodin myöhemmin...Uskon, että sain sen [Sharpziplib](http://www.icsharpcode.net/OpenSource/SharpZipLib/) jutut - joillakin muokkauksilla - laitan kommenttiotsikot myöhemmin takaisin noudattamaan Lisenssi-juttuja - juuri nyt se on vain esimerkki) todellinen koodi näkymätilan tiivistämiseksi on erittäin yksinkertainen:

```
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);
        }
    }
}
```

Käyttääksesi sitä, voit vain periä tämän sivun normaalin järjestelmän sijaan.Web.UI.Page. Menetät ilmeisesti osan tavallisista Viewstate-toiminnoista, kuten salauksen - mutta näiden pitäisi olla helppoja sijoittaa takaisin...Näen tällä hetkellä melko suuria säästöjä ViewState-koossa, kun käytät tätä - BZip2-kompressointia - koska se on koodi, josta valehtelin..., kokeile sitä. Kaikki kommentit / ehdotukset ovat, kuten aina, arvostettuja.

Olen tehnyt [testiprojekti tämän kanssa leikittelyyn](/uploads/ViewStateCompression.zip) , se on VSNET 2003, siinä on kaikki tarvittava (mukaan lukien pakkaustarvikkeet).

PÄIVITYS: Olen vain tehnyt joitakin testejä tällä...esimerkkinä, käyttäen DataSet asuttu "Select \* Northwind DB:n tilauksesta sidottuna oletukseen DataGrid (valitsin tämän olevan kaikkein porsain mahdollinen...), siirryn mielestäni 659984 tavusta 52080 tavuun asti. Säästö on noin 92 prosenttia - mikä on mielestäni aika vaikuttavaa! Olen varma, että tässä on joitakin haittoja (lukuun ottamatta muutamaa lisäsykliä, joita vaaditaan paineluun) - mutta onko olemassa mitään todellista syytä, miksi MS ei anna pakkausvaihtoehtoa ViewStatelle ulos laatikosta - kuka tahansa???

PÄIVITYS: Selvä, niille, jotka ovat arvostelleet koodia...tämä on prototyyppi - vain testatakseni ideaa, aion leikkiä tällä jossain vaiheessa hieman enemmän ja aion katsoa mukaan joitakin hauskoja ominaisuuksia, kuten [Denis Bauerin ViewState-katsoja](http://www.denisbauer.com/ASPNETControls.aspx) Sisäänrakennettu, eri pakkausjärjestelmät, eri salaus - myös uskomattoman tehokas [Kaksikala](http://www.codeproject.com/csharp/twofish_csharp.asp)- lyhyesti sanottuna se on lelu, jota katson ja laajennan nykyistä ViewState-toteutusta.