2009-08-28 4 views
0

のHy、ビューステートた最適化

私はのViewState

(ビューステートのサイズを縮小する元。、 または単にビューステートをスピードアップするためのasp.net Ajaxのプロジェクトでは、いくつかの一般的な最適化手法に興味がありますどういうわけか、 またはその他これは一般的な議論でなければなりません:-))。

ViewStateにはどのような最適化を使用しますか? Asp.netまたはAjaxフレームワークではどのような可能性がありますか?

答えて

2

@ silkyは正しいですが、可能な限り無効にしてください。できるだけ多くのコントロールで無効にしています。

また

、あなたはできるだけ使用していると、それは(基本ページクラス以上)

Protected Overrides ReadOnly Property PageStatePersister() As PageStatePersister 
    Get 
     Return New SessionPageStatePersister(Me) 
    End Get 
End Property 

をあなたのページでこのような何かを置くことを見て価値があるかもしれませんしかし、それが依存あなたが持っているユーザーの数とメモリの量は、セッションを使用していることを前提としています。

ああとC#でそれはです:

protected override PageStatePersister PageStatePersister 
{ 
    get 
    { 
     return new SessionPageStatePersister(this); 
    } 
} 
+1

セッションの状態は非常に悪いです。多くの同時ユーザーがいる場合、サーバ上のメモリ使用量が多すぎるとWebアプリケーションが最終的に消去されます。 その他のより良いアプローチは、新しいPageStatePersisterクラスを作成し、Tempファイルに値を格納し、一時ファイルを蓄積して削除してください。 –

+0

RAMは安価で汚いですが、高速ディスクのアクセス時間が遅い場合でも、私はむしろ遅いディスクに縛られるよりも多くのRAMに一杯のお金を費やしたいと思います。 もちろん、私はviewstateをまったく使用していないと思いますが、時にはそれが使用されることもあります。 – ilivewithian

1

最適な最適化:より少ないものを保存します。

しかし、具体的にする必要があります。あなたは問題を経験していますか?はいの場合、どのようなコントロールを使用しますか?あなた自身の?その他?展開してください。

+0

私は他の人が、多くの場合、自分のためにthier自身viewstate.Asを処理する方法だけで興味私はコントロールwhitoutビューステートを使用していますが、まだviewstateの大きさは依然として大きかったです。可能であれば、viewstateの暗号化レベルを増やすつもりです。 –

+0

ViewStateの "Encryption Level"?どういう意味ですか? ViewStateは暗号化されておらず、エンコードされています。私のアプローチ:私はviewstateにそれほど多くを保存しません。 –

+0

あなたは正しいと思いますが、エンコーディングはviewstateを少し圧縮していると思います。今、私はよく分かりません。 –

2

表示を無効にする明示的に必要としないコントロールの状態を無効にします。たとえば、メニューにいくつかのハイパーリンク、いくつかの表示統計ラベルなどのビューステートを必要としないコントロールが多数あります。

また、別のことは、コントロールIDの長さを減らすことです。これにより、ページサイズがはるかに改善されます。

あなたのコントロールIDは、次のようなものです

PageContainer1_MyLoginContainerUserControl1_MyLoginForm1_MyUsername1

PageContainer1_MyCustomerDataGrid1_item0_MyCustomerNameLabel

私はそれが少し悪い音を知っていますが、グリッドに気付いた場合/リスト項目は、このようなので、多くのビッグコントロールIDを入れて、我々 IDの特定の文字を減らすことによってページサイズを改善することにも気づいた。リスト/グリッドビューなどでは、これを30%〜40%改善します。ネストされたユーザーコントロールも悪いですが、コントロールのIDがもう必要ないと思うときは、3文字の最大値を入れてください。

1

私はこれについて批判することができますが、場合によってはstore viewstate in session by just override tho methods of Pageとすることもできます。

私のカルマとのバランスをとるため、Asp.NET MVCを試すなど、将来のプロジェクトでviewstateとセッションの両方を中止することをお勧めします。

+0

私はそれに同意する! :) –

1

あなたはTRULY Understanding ViewStateを読むことがない場合、最初のことを行います。

AJAXは、ViewStateのを助けるため、私はちょうどここに推測だけど、あなたはのUpdatePanelでページ全体を持っている場合は、ページ全体のために

1

をViewStateのを無効にすることができるかもしれませんさて、私は私を削減することができたとしてそれをサーバー上に保持し、GUIDを前後に渡すことによって、200〜300KBから62バイトのビューステートを表示します。

私はあなたが参照できるHiddenFieldPageStatePersisterを拡張することでこれを行う方法についての記事を書かれている:

http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/