3

約 10.000 個の不変オブジェクトを処理する C# アプリケーションがあります。各オブジェクトのサイズは 50KB ~ 1MB です。アプリケーションは、操作ごとに約 10 ~ 100 個のオブジェクトを選択します。どのオブジェクトが選択されるかは、状況とユーザーの選択によって異なりますが、非常に頻繁に使用されるオブジェクトがいくつかあります。

すべてのオブジェクトを常にメモリに保持するのは多すぎますが、ディスク アクセス時間が迫っています。人気ベースのキャッシュを使用して、ディスク アクティビティを削減したいと考えています。キャッシュには最大が含まれます。300 個のオブジェクト。使用パターンの間に、どれをキャッシュするかを決定することを期待しています。各オブジェクトにアクセス カウンターを簡単に追加できます。人気の高いものが入るほど、あまり人気のないものはキャッシュを離れなければなりません。私のお尻をコーディングせずにそれを行う簡単で独創的な方法はありますか?

4

4 に答える 4

1

既成のソリューションの1つは、ASP.NETキャッシングのスライド式有効期限ウィンドウを使用することです。

于 2012-04-17T12:58:40.847 に答える
1

System.Runtime.Cachingを使用できます。一定時間後にキャッシュされたオブジェクトが変更された場合、常に使用されるオブジェクトをキャッシュします。キャッシュが有効である時間を指定できます。キャッシュが無効になると、イベント ハンドラでキャッシュを再構築できます。

キャッシュを再構築するときは、必ず何らかのスレッド同期メカニズムを使用してください。

于 2012-04-17T13:04:04.983 に答える
1

WeakReferencesを使用します。その上に単純なキャッシュ マネージャーを数分で構築し、.NET に実際のメモリ管理を任せることができます。

プログラムで使用するメモリの量を制限する必要がある場合、これは最善の解決策ではないかもしれませんが、それ以外の場合は、確認する価値があります。

于 2012-04-17T13:04:28.467 に答える
0

MemCachedの仕事のようですね!これは、無料のオープンソースの高性能で柔軟なキャッシングソリューションです。http://www.memcached.orgからダウンロードできます。

大まかな概要については、https://en.wikipedia.org/wiki/MemcachedのWikipediaページを参照してください。

幸運を!

于 2012-04-17T13:05:10.467 に答える