すべてのユーザーが共有する ASP.NET のサーバー上のメモリに単純なテーブルを格納する簡単な方法はありますか? たとえば、単純なチャット プログラムがあり、最後の 100 レコードだけをメモリに保持したいとします (これは実際のアプリケーションではなく、単なる例です)。たった 100 レコードのチャット バッファ専用のテーブル全体を SQL で使用したくないとします。インメモリ データ テーブルを作成し、接続しているユーザー間で共有する方法はありますか?
4 に答える
キャッシュを使用する(MSDN)
このクラスのインスタンスは、アプリケーション ドメインごとに 1 つ作成され、アプリケーション ドメインがアクティブである限り有効です。このクラスのインスタンスに関する情報は、HttpContext オブジェクトの Cache プロパティまたは Page オブジェクトの Cache プロパティを通じて入手できます。
DataTable yourDataTable = new DataTable();
Cache["yourTable"] = yourDataTable;
//to access it
DataTable dt = Cache["yourTable"] as DataTable;
オブジェクトを使用してHttpApplicationState
、すべてのユーザーがアクセスできるメモリに物を保存できます。
HttpContext.Current.Application["MyTable"] = myTable;
またはCache
オブジェクト(よりスレッドセーフです):
HttpContext.Current.Cache["MyTable"] = myTable;
Application and Cacheに関する良い記事があります。
Cache オブジェクトと Application オブジェクトは、Session オブジェクトよりも広いスコープを提供し、データは ASP.NET アプリケーション内のすべてのクラスで利用できます。
はい、それはグローバルキャッシュになります。それを行うダウンと汚い方法は、値を保存することですアプリケーション状態です。これは基本的に、IIS が実行されている限り常に存在するキー バリュー ストアです。
Application["someKey"} = SomeObject;
同じ方法でアクセスできます `
var myObject = Application["someKey"];`
はるかに洗練されたソリューションがありますが、少量のデータを保存する必要がある場合は、単純なグローバルなもので十分です。
多くのオプションがあります。アプリケーション キャッシュは、同じ ASP.NET アプリケーション プール内のすべてのユーザーとすべてのセッションで共有されます。ここを確認してください。
http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx
もう1つのオプションは、dbのようなアプローチを本当に使用するかどうかに応じて、SQL ServerコンパクトまたはSQL Liteのようなインメモリ/組み込みデータベースを使用することです。