Merhaba arkadaşlar,

Eğer sayfanızın aşırı yavaşlığından şikayetçi iseniz bu yöntemi denemenizde fayda var. Bu yöntem sayesinde sayfanızdaki büyük

viewstate bilgileri gzip ile sıkıştırılarak küçük hale getirilir ve sayfanızın cevap verme süresi %40 ile %60 arasında hızlanır. Tabiki sıkıştırma anında işlemciye ek yük getirecektir. bunuda göz ardı etmemek lazım.

Viewstate sayfamızda hiddefield içerisinde tutulur. Şu şekilde;

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJLTMzMTY4NDI5ZGRrYY+UdQNeb33gRiGcw2LoiMHduA==" /> 

sıkıştırdıktan sonra __VIEWSTATE alanı __COMPRESSEDVIEWSTATE şekilde görünecektir.

 

Şimdi sizlere iki tane class dosyası  vereceğim bunları App_code klasörüne eklemeniz gerekiyor.

 

BasePage.cs

 

using System;
using System.IO;
using System.IO.Compression;
using System.Collections;
using System.ComponentModel;
using System.Web.UI;
using System.Configuration;
using System.Threading;
using System.Globalization;
using System.Text;

public abstract class BasePage : System.Web.UI.Page
{
    private ObjectStateFormatter _formatter =
        new ObjectStateFormatter();

    protected override void
        SavePageStateToPersistenceMedium(object viewState)
    {
        MemoryStream ms = new MemoryStream();
        _formatter.Serialize(ms, viewState);
        byte[] viewStateArray = ms.ToArray();
        ClientScript.RegisterHiddenField("__COMPRESSEDVIEWSTATE",
            Convert.ToBase64String(
            CompressViewState.Compress(viewStateArray)));
    }
    protected override object
        LoadPageStateFromPersistenceMedium()
    {
        string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];
        byte[] bytes = Convert.FromBase64String(vsString);
        bytes = CompressViewState.Decompress(bytes);
        return _formatter.Deserialize(
            Convert.ToBase64String(bytes));
    }
}

 

 

 

CompressViewState.cs

 

using System;
using System.Data;
using System.Configuration;
using System.IO;
using System.IO.Compression;


public static class CompressViewState
{

    public static byte[] Compress(byte[] data)
    {
        MemoryStream output = new MemoryStream();
        GZipStream gzip = new GZipStream(output,
                          CompressionMode.Compress, true);
        gzip.Write(data, 0, data.Length);
        gzip.Close();
        return output.ToArray();
    }

    public static byte[] Decompress(byte[] data)
    {
        MemoryStream input = new MemoryStream();
        input.Write(data, 0, data.Length);
        input.Position = 0;
        GZipStream gzip = new GZipStream(input,
                          CompressionMode.Decompress, true);
        MemoryStream output = new MemoryStream();
        byte[] buff = new byte[64];
        int read = -1;
        read = gzip.Read(buff, 0, buff.Length);
        while (read > 0)
        {
            output.Write(buff, 0, read);
            read = gzip.Read(buff, 0, buff.Length);
        }
        gzip.Close();
        return output.ToArray();
    }
}
 

 

evet işlemin sonuna geldik. Şimdi de bunu nasıl kullanacağımızı görelim.

Normalde bir aspx sayfa oluşturduğunuzda bunun  System.Web.UI.Page namespace inden türediğini görürsünüz.

şu şekilde;

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

 

Biz bunu şu şekilde değiştiriyoruz.

public partial class Default : BasePage

 

Tüm aspx sayfalarımızı bundan türeterek viewstate boyutunu minimuma indirebiliriz.

Herkese iyi çalışmalar dilerim.

 

Mustafa KOÇER

mkocer@dotnetkosesi.com

3 kişi tarafından 3.7 olarak değerlendirildi

  • Currently 3,666667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5