2010-11-19 9 views
4

名前付きキャッシュがあり、単純にそのオブジェクト数を(プログラムで)戻したいとします。AppFabricの名前付きキャッシュオブジェクト数の取得

私はDataCacheオブジェクトを持っています: cache = factory.GetCache( "cacheName");

私は現在、以下を試しています: cache.GetObjectsInRegion( "cacheName")。Count();

リージョンが名前付きキャッシュと異なることを認識していますが、これを達成するための他の方法はありません(私は確信していますが)。何かご意見は?

答えて

8

これは予想通り簡単ではありませんが、実行可能です。

オブジェクトがAppFabricキャッシュに追加されると、その領域を指定するかどうかに関係なく、オブジェクトが領域に移動します。キャッシュが作成されると、デフォルト領域のセットが作成されます(私のテストリグ上に1024個、Default_Region_0000Default_Region_0001など)、アイテムがキャッシュに追加されると、彼らが入る地域

ので、名前の地域の外にキャッシュ内のオブジェクトの総数を見つけるために、あなたがデフォルト領域の一人一人のためにGetObjectsInRegionを実行する必要があります。

int totalItemCount = 0; 
foreach (string regionName in cache.GetSystemRegions()) 
{ 
    totalItemCount += cache.GetObjectsInRegion(regionName).Count(); 
} 

これらの1024地域の複雑さを考えると、Iすべてのオブジェクトが指定された領域内になければならないという納得のいくケースを作ることができると考えています。そのためのコストは実質的になく、潜在的なメリットはキャッシュ内のオブジェクトの数を確認することです。これが共通の要件である場合は、これをDataCacheクラスの拡張メソッドにすることも考えられます。

+0

魅力的な作品は、大変感謝しています。 – downatone

+6

名前付きリージョンは、参加しているノード全体に分散されず、分散クラスターを大幅に評価します。 – andrewbadera

+3

LINQified: 'cache.GetSystemRegions()。SelectMany(regionName => cache.GetObjectsInRegion(regionName))。Count()' –

関連する問題