2010-11-19 33 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個區域的複雜性,我認爲你可以做出令人信服的情況,即每個對象都應該位於命名區域中:這樣做實際上沒有成本,並且可以更容易地看出緩存中有多少對象。如果這是您的常見要求,那麼您也可以考慮將其作爲DataCache類的擴展方法。

+0

工程就像一個魅力,非常感激。 – downatone 2010-11-25 20:00:42

+6

命名區域不會跨參與節點分佈,大大降低分佈式羣集的價值。 – andrewbadera 2011-05-13 16:49:46

+3

LINQified:'cache.GetSystemRegions()。SelectMany(regionName => cache.GetObjectsInRegion(regionName))。Count()' – 2012-02-14 16:51:24