データセットを View State に保存しました (クライアントのクリックごとにデータをフィルタリングしてデータを表示する必要があるため) が、ページの読み込みに時間がかかっているように感じます。実行するコードがなく、ほぼ 2 ~ 3 秒かかります。
これはビュー ステート データのためだけですか?もしそうなら、私のタスクを達成できる代替手段はありますか? クライアントイベントでデータをすばやく表示する必要があるため、ビューステートを使用しています。回避策があれば役立ちます。
上記の @Tushar のように、ViewState は大量のデータを保存する場所ではありません。これは実際には、ラウンド トリップ間でコントロールの状態を保持することのみを目的としており、実際にはアプリのパフォーマンスが低下する可能性があります。
代わりに、次のサーバー管理オプションを調べる必要があります。
アプリケーションの状態- すべてのユーザー間で共有されるデータの保存に使用されます。サーバーのメモリを使用します。
セッション状態- ユーザーのセッションに固有のデータを保存するために使用されます。サーバーメモリも使用します。アプリの再起動時だけでなく、Web ガーデンやサーバー ファーム全体でデータを永続化できます。MSDN の詳細情報: http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx
これらの方法の最大の短所はメモリ管理です。どちらのオプションもサーバーのメモリを消費し、何らかの再起動が行われるか、セッションが切断されるまでデータを保持します。したがって、これらの方法は常に適切に拡張できるとは限りません。
また、状態管理のさまざまな .net メソッドについて説明している MSDN の記事があり、各メソッドの長所と短所があります。
3 番目のオプションは、 .NET キャッシュライブラリを使用するか、独自に構築するか、サード パーティのキャッシュ サーバー/ライブラリを使用して、キャッシュ戦略を実装することです。キャッシュを使用する利点は、指定した時間が経過するとデータが自動的に期限切れになることです。ただし、Web ガーデンまたはサーバー ファーム環境で作業する場合、複雑さが生じます。
覚えておくべき最大のことは、上記の戦略のいずれも、データの管理/共有に関して計画と検討が必要になるということです。
ViewState に大量のデータを格納している場合、パフォーマンスの問題に気付くでしょう。ViewState は実際には「このページのみ」を対象としており、Session は「このセッション」を対象としていますが、ViewState のサイズの制限に達すると、Session のパフォーマンスが最終的に大幅に向上します。
ViewState の問題だけでなく、他の種類の問題が発生している可能性があることに注意してください (つまり、データベース クエリに時間がかかり、キャッシュされる可能性があります)。
シリアル化された ViewState を保持するためにページの HTML に追加のデータが埋め込まれているため、ViewState はページをわずかに大きくします。その余分なサイズによって負荷の問題が発生するかどうかは、接続速度と、ページの残りの部分に対するビュー ステートのサイズによって異なります。
ViewState は、各 HTTP 要求でサーバーに送り返されます (AutoPostback を含む)。繰り返しますが、それによって顕著なパフォーマンスの問題が発生するかどうかは、ビュー ステートのサイズと接続速度によって異なります。
一般的なページに見られる量の ViewState データを含むブロードバンド (っぽい) 接続では、2 ~ 3 秒の追加処理時間は見られません。
診断中
ブラウザーで開発者ツールを使用します (IE では F12 キーを押します)。送受信された正確なヘッダーと本文を含む Web 要求を監視できます。各 HTTP リクエストのタイミングも確認できます。ViewState が大きくなく (おそらく 1 ~ 2K 以下)、接続速度が極端に遅くない場合、それは原因ではありません。
代替案
状態を完全にサーバー側で保持することも、大きな状態アイテムをすべてサーバー上に置くこともできます。Ajax リクエストを使用して、その状態に依存するページ イベントを処理できます。
ページのソースを表示して値を取得し、以下のURLViewState
でオンラインを使用して、ページの ViewState フィールドに格納されている値の大きさを確認できます。ViewState decoder
http://ignatu.co.uk/ViewStateDecoder.aspx
ビューステートに大きな値が格納されていることがわかった場合は、 Dataset
.
とにかく、Dataset を ViewState に入れないようにする必要があります。