dataTableに10,000行が含まれていて、データテーブルをセッション変数に格納する際の落とし穴を知りたい...新しい行が追加されるまでそれを使用したい...
どのタイプのセッションモードを使用する必要がありますか?
dataTableに10,000行が含まれていて、データテーブルをセッション変数に格納する際の落とし穴を知りたい...新しい行が追加されるまでそれを使用したい...
どのタイプのセッションモードを使用する必要がありますか?
絶対に行わないでください。お勧めしません。サーバーのメモリが少なく、処理時間がビジー状態の場合、パフォーマンスに影響します。
これに進む前に、検討する必要があります
なぜそんなに多くのデータをセッションに保存したいのですか?おそらく、これをページネーション(私が想定するデータグリッドで)のために行っている可能性があります。その後、設計を再検討する必要があります。
ユーザーセッション全体でデータが必要な場合は、セッションに保存することをお勧めします。ただし、あなたの場合は、ViewStateまたはCacheのいずれかを選択できます。ViewStateに保存する方が良いです。
ViewState ["Table"] = ds.Tables [0];
それを取得するには、
DataSet ds = new DataSet(); ds =(DataSet)ViewState ["Table"];
ただし、DataSetをViewState内に配置すると、ページの読み込みが増えることを覚えておいてください。
****
要求したことを実行する最も効率的な方法は、DBによって返されたデータセットを汎用リストに変換してから、リストを保持するためにセッションを使用することです。リストは、セッションでデータセットよりも少ないメモリを消費します。
****
まず、セッションレベルで保存されたデータが本当に必要ですか。アプリケーションレベル(キャッシュオブジェクト)にもう少し保存できますか?
複数のIISサーバーであるファームがある場合は、メモリ内キャッシュまたはSQLキャッシュのいずれかを使用する必要があります。大きなblobを使用すると、メモリ内キャッシュが高速になります。そのサーバー上のメモリ内の単一のコンピュータ上でそれが機能する場合。
問題のリファクタリングについて真剣に考えます。データ量を減らすために、ページングやその他の形式のデータウィンドウを導入できますか?
データセットが非常に大きいので、セッションまたはビューステートに保存する必要はないと思います。SQL状態での保存には、読み取りと書き込みの大きなオーバーヘッドもあります。メモリセッションに保存すると、ワーカープロセスのメモリ使用量に大きく影響します。ViewStateに保存すると、ページサイズと、ビューステートのエンコードとデコードにかかる時間が原因でページの読み込みが非常に遅くなるため、さらに悪化します。
あなたが本当にそれをしなければならないのなら、私はすべての選択肢の中で、メモリセッションに行き、代金を支払います。それ以外の場合は、コードをリファクタリングし、そのサイズのデータテーブルをキャッシュして、必要に応じてセット/ページのデータを引き出す必要がないことを検討する必要があると思います。または、階層化アーキテクチャを使用している場合は、アプリケーションコードにキャッシュさせ、リクエストが行われると、アプリケーションコードは必要に応じてレコード/サブセットを抽出してUIに返すことができます。