1

dataTableに10,000行が含まれていて、データテーブルをセッション変数に格納する際の落とし穴を知りたい...新しい行が追加されるまでそれを使用したい...

どのタイプのセッションモードを使用する必要がありますか?

4

4 に答える 4

0

絶対に行わないでください。お勧めしません。サーバーのメモリが少なく、処理時間がビジー状態の場合、パフォーマンスに影響します。

これに進む前に、検討する必要があります

  1. サーバーに使用可能なメモリがありますか?
  2. サーバーはどれくらいビジーですか?
  3. セッションに入れるデータが複数のユーザーリクエスト間で共有されるかどうか。

なぜそんなに多くのデータをセッションに保存したいのですか?おそらく、これをページネーション(私が想定するデータグリッドで)のために行っている可能性があります。その後、設計を再検討する必要があります。

于 2010-02-24T05:36:10.620 に答える
0

ユーザーセッション全体でデータが必要な場合は、セッションに保存することをお勧めします。ただし、あなたの場合は、ViewStateまたはCacheのいずれかを選択できます。ViewStateに保存する方が良いです。

ViewState ["Table"] = ds.Tables [0];

それを取得するには、

DataSet ds = new DataSet(); ds =(DataSet)ViewState ["Table"];

  1. 割り当てられる前にセッション変数が読み取られた場合、または現在のセッションがタイムアウトした場合、セッション変数から読み取る前にnullチェックが行われないため、NullReferenceExceptionが発生します。
  2. セッション変数の使用状況、キー名、データ型、セッションごとに使用されているおおよそのメモリなどを追跡する簡単な方法はありません。

ただし、DataSetをViewState内に配置すると、ページの読み込みが増えることを覚えておいてください。

****

要求したことを実行する最も効率的な方法は、DBによって返されたデータセットを汎用リストに変換してから、リストを保持するためにセッションを使用することです。リストは、セッションでデータセットよりも少ないメモリを消費します。

****

于 2010-02-24T05:06:39.307 に答える
0

まず、セッションレベルで保存されたデータが本当に必要ですか。アプリケーションレベル(キャッシュオブジェクト)にもう少し保存できますか?

複数のIISサーバーであるファームがある場合は、メモリ内キャッシュまたはSQLキャッシュのいずれかを使用する必要があります。大きなblobを使用すると、メモリ内キャッシュが高速になります。そのサーバー上のメモリ内の単一のコンピュータ上でそれが機能する場合。

問題のリファクタリングについて真剣に考えます。データ量を減らすために、ページングやその他の形式のデータウィンドウを導入できますか?

于 2010-02-24T05:07:22.607 に答える
0

データセットが非常に大きいので、セッションまたはビューステートに保存する必要はないと思います。SQL状態での保存には、読み取りと書き込みの大きなオーバーヘッドもあります。メモリセッションに保存すると、ワーカープロセスのメモリ使用量に大きく影響します。ViewStateに保存すると、ページサイズと、ビューステートのエンコードとデコードにかかる時間が原因でページの読み込みが非常に遅くなるため、さらに悪化します。

あなたが本当にそれをしなければならないのなら、私はすべての選択肢の中で、メモリセッションに行き、代金を支払います。それ以外の場合は、コードをリファクタリングし、そのサイズのデータ​​テーブルをキャッシュして、必要に応じてセット/ページのデータを引き出す必要がないことを検討する必要があると思います。または、階層化アーキテクチャを使用している場合は、アプリケーションコードにキャッシュさせ、リクエストが行われると、アプリケーションコードは必要に応じてレコード/サブセットを抽出してUIに返すことができます。

于 2010-02-24T05:14:52.317 に答える