6

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

4

4 に答える 4

10

キャッシュを使用する(MSDN)

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

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

//to access it
DataTable dt = Cache["yourTable"] as DataTable;
于 2012-10-24T08:44:52.557 に答える
2

オブジェクトを使用してHttpApplicationState、すべてのユーザーがアクセスできるメモリに物を保存できます。

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

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

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

Application and Cacheに関する良い記事があります。

Cache オブジェクトと Application オブジェクトは、Session オブジェクトよりも広いスコープを提供し、データは ASP.NET アプリケーション内のすべてのクラスで利用できます。

于 2012-10-24T08:44:32.887 に答える
0

はい、それはグローバルキャッシュになります。それを行うダウンと汚い方法は、値を保存することですアプリケーション状態です。これは基本的に、IIS が実行されている限り常に存在するキー バリュー ストアです。
Application["someKey"} = SomeObject;

同じ方法でアクセスできます `

var myObject = Application["someKey"];`

はるかに洗練されたソリューションがありますが、少量のデータを保存する必要がある場合は、単純なグローバルなもので十分です。

于 2012-10-24T08:46:24.360 に答える
0

多くのオプションがあります。アプリケーション キャッシュは、同じ ASP.NET アプリケーション プール内のすべてのユーザーとすべてのセッションで共有されます。ここを確認してください。

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

もう1つのオプションは、dbのようなアプローチを本当に使用するかどうかに応じて、SQL ServerコンパクトまたはSQL Liteのようなインメモリ/組み込みデータベースを使用することです。

于 2012-10-24T08:46:39.920 に答える