72

セッションとキャッシュでのデータテーブルの保存の違いは何ですか? 長所と短所は何ですか?

したがって、結果をデータテーブルに返し、それをグリッドビューにバインドする単純な検索ページの場合。ユーザー「a」が検索し、ユーザー「b」が検索する場合、ユーザーごとに結果が異なる可能性が高いため、セッションに保存する方が良いですか、それとも各検索をキャッシュに保存できますか、それとも意味がないので意味がありませんキャッシュは 1 つだけです。基本的に私が言おうとしているのは、キャッシュが上書きされるということだと思います。

4

8 に答える 8

85

重要な違いの1つは、キャッシュ内のアイテムは、指定された時間が経過すると期限切れになる(キャッシュから削除される)可能性があることです。セッションに入れられたアイテムは、セッションが終了するまでそこにとどまります。

ASP.NETは、使用可能なメモリの量が少なくなったときに、キャッシュからアイテムを削除することもできます。

もう1つの違いは、セッションの状態を外部(状態サーバー、SQLサーバー)に保持し、Webアプリの複数のインスタンス間で共有する(負荷分散のため)ことができることです。これはキャッシュには当てはまりません。

これらの違いに加えて(他の人が指摘しているように):セッションはユーザー/セッションごとですが、キャッシュはアプリケーションごとです。

于 2009-01-09T16:14:15.677 に答える
31

AFAIK、主な違いはセッションがユーザーごとであるのに対し、キャッシュはアプリケーションスコープのアイテム用です。

他の回答で述べたように、(セッションまたは Cookie のいずれかで) キーを提供すれば、ユーザーごとの情報をキャッシュに保存できます。そうすれば、キャッシュ内のアイテムを期限切れにし、それらに依存関係を設定するためのより詳細な制御が可能になります。そのため、問題の DataTable が定期的に変更される場合は、おそらくキャッシュが適切なオプションです。それ以外の場合、静的セッションの場合はより適切な場合があります。Steven Smith は、チェックする価値のあるdnrtv でのキャッシングに関する優れたビデオを公開しています。

それは、何を達成しようとしているのか、どれだけの時間があるかに大きく依存します。アプリケーションに状態を保存する方法に関して、考慮すべき他の選択肢がいくつかあります。テーブルの大きさによっては、状態を Cookie に保存することを検討できます (機密情報である場合は暗号化されます)。または、アプリケーション スコープのデータの場合は、ページまたはクラスで静的フィールドを使用します。Application オブジェクトもあります。

更新: 自問しなければならない重要な質問は、誰がこのデータを見るべきかということです。

Are they going to access the data frequently?  

(いいえ、気にしないでください)。

Is it going to change?  

(いいえ、静的フィールドまたはアプリケーションを使用してください)。

Is it acceptable for user a and user b to see the same results?  

(いいえ、ユーザー名と検索語で構成されるキーでキャッシュを使用してください。)
(はい、検索語のキーを使用してキャッシュを使用します)。

正直なところ、開発がそれほど進んでいない場合は、キャッシング/状態の問題を後日保留することを検討します-必要ないかもしれません.

パフォーマンス チューニングの最初の 3 つのルールは次のとおりです。1. 測定する、2. さらに測定する。3. 再度測定...

于 2009-01-09T16:08:52.580 に答える
16

もう 1 つの重要な違いとして、同時非同期 Ajax リクエストが実行されるとセッション状態がブロックされ、パフォーマンスに影響します。

于 2013-12-19T07:09:20.730 に答える
5

キャッシュは、データの取得回数を減らす目的でアプリケーション スコープにあります。セッションは、特定のユーザー状態を与えることを目的として、ユーザーのセッション スコープ内にあります。

于 2009-01-09T16:10:53.560 に答える
5

それは、ASP.NET 用にセッションをどのように構成しているかによって異なります。セッションをデータベースまたはメモリに保存していますか? メモリ内で別のサーバーを使用していますか、それとも現在の Web サーバーをセッションに使用していますか?

設定方法によっては、おそらく大量のデータを保存していることを示すデータテーブルのようなものを使用しているときに、パフォーマンスに影響を与える可能性があります。

また、セッションはユーザーごとに保存され、ユーザーが Cookie を受け入れず、ASP.NET を Cookie なしモードに設定している場合は、セッション Cookie または URL に保存されているセッション チケットによってユーザーごとに取得されます。キャッシュするものはすべてアプリケーション レベルでキャッシュされ、必要な場合とそうでない場合があるすべてのユーザー セッションで使用できるようになります。

于 2009-01-09T16:12:10.953 に答える
4

セッションはユーザーごと、キャッシュはアプリケーション用です。

キャッシュ内のアイテムは、有効期限(スライドまたは固定)とIISワーカープロセスのメモリ制約に基づいて自動的に削除できます。

したがって、基本的にキャッシュ内のアイテムが存在することは保証されませんが、セッションはセッションが終了するまでそこにとどまります。

ユーザーごとに(セッションまたはキャッシュのクリエイティブな使用を介して)アイテムを保存すると、大量のメモリ使用量につながる可能性があるため、慎重に検討する必要があります。

さらに、IISがワーカープロセスをリセットすると、キャッシュとセッションが失われる可能性があります。

于 2009-01-09T16:12:45.133 に答える
4

この回答を参照してください。

memcachedやvelocityなどのバックエンドプロバイダーを使用しない限り、セッションによってアプリのパフォーマンスが低下する可能性があります。一般的には避けるべきです。

于 2009-01-09T16:14:30.307 に答える