2012-10-24 10 views
6

すべてのユーザーが共有する単純なテーブルをASP.NETのサーバー上のメモリに格納する簡単な方法はありますか?たとえば、単純なチャットプログラムを持っていて、最後の100レコードをメモリに保持したいとします(これは実際のアプリケーションではなく、単なる例です)。 100個のレコードしかないこのチャット・バッファであることに専念したテーブル全体をSQLで使用したくないとします。メモリ内のデータテーブルを作成し、接続されたユーザー間で共有できる方法はありますか?単純なテーブルをASP.NETのメモリに格納しますか?

+0

なぜテーブルにする必要がありますか?単純な 'static Queue 'はどうでしょうか? – paul

答えて

8

使用Cache (MSDN)

このクラスの1つのインスタンスがアプリケーションドメインごとに作成し、それ は限りアプリケーションドメインがアクティブのままとして、有効なままです。 このクラスのインスタンスに関する情報は、 HttpContextオブジェクトのCacheプロパティまたは PageオブジェクトのCacheプロパティを介して利用できます。

DataTable yourDataTable = new DataTable(); 
Cache["yourTable"] = yourDataTable; 

//to access it 
DataTable dt = Cache["yourTable"] as DataTable; 
2

あなたは、すべてのユーザーのためのメモリとaccesableで物事を格納するHttpApplicationStateオブジェクトを使用することができます。

HttpContext.Current.Application["MyTable"] = myTable; 

または(よりスレッドセーフである)Cacheオブジェクト:

HttpContext.Current.Cache["MyTable"] = myTable; 

ここです良い記事約Application and Cache

キャッシュオブジェクトとアプリケーションオブジェクトは、セッションオブジェクトよりも広い範囲を提供し、データはASP.NETアプリケーション内のすべてのクラスで使用できます。

0

はい、それはグローバルキャッシュになります。それを行うためのダウンとダーティな方法は、アプリケーションの状態です値を格納することです。これは本質的に、IISが実行されている限り常に重要なバリューストアです。あなたはそれを同じように `

var myObject = Application["someKey"];` 

にアクセスすることができます
Application["someKey"} = SomeObject;

はるかにエレガントな解決策がありますが、あなたは、少量のデータを格納する必要があるときには、簡単なグローバルなもののためにであなたを取得します。

0

あなたは多くのオプションは、アプリケーションキャッシュは、すべてのユーザー間で共有されていると同じASP.NETアプリケーションプール内のすべてのセッションは、ここにチェック:

http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx

は別のオプションは、メモリ内で使用することができ/ SQL Server CompactやSQL Liteのような、組み込みのデータベースで、実際にdbのようなアプローチを使用するかどうかによって異なります。

関連する問題