2012-04-17 3 views
3

約10,000個の不変オブジェクトを扱うC#アプリケーションがあります。各オブジェクトのサイズは50KB〜1MBです。 アプリケーションは、操作ごとに約10〜100個のオブジェクトを選択します。選択されるオブジェクトは、状況やユーザーの選択に依存しますが、非常に頻繁に使用されるものがいくつかあります。人気度の高いキャッシングのソリューション

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

答えて

1

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

キャッシュを再構築するときに、いくつかのスレッド同期メカニズムを使用していることを確認してください。

+1

+1ホイールを改造しないためです。 OPがスライディング期限を使用したいことを知っていることはおそらく重要です。これは、最も頻繁に使用されるアイテムを優先的にキャッシュに保持します。 –

1

私はWeakReferencesと一緒に行くでしょう:数分で簡単なキャッシュマネージャを構築し、.NETが実際のメモリ管理を単独で処理できるようにします。

プログラムで使用するメモリ量を制限する必要がある場合は最適な解決策ではないかもしれませんが、それ以外の場合はチェックアウトする価値があります。

0

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

概要を確認するには、https://en.wikipedia.org/wiki/MemcachedのWikipediaページをご覧ください。

幸運を祈る!

関連する問題