C# AppFabric获取命名缓存对象计数

C# AppFabric获取命名缓存对象计数,c#,appfabric,C#,Appfabric,我有一个命名缓存,只想(以编程方式)返回它的对象计数 我有一个DataCache对象: cache=factory.GetCache(“cacheName”) 我目前正在尝试以下操作: cache.GetObjectsInRegion(“cacheName”).Count() 我意识到一个区域不同于一个命名缓存,但我没有看到任何其他方法可以让我实现这一点(尽管我确信有)。有什么想法吗?这并不像你想象的那么简单,但它是可以做到的 将对象添加到AppFabric缓存时,无论是否指定区域,它都会进入区

我有一个命名缓存,只想(以编程方式)返回它的对象计数

我有一个DataCache对象: cache=factory.GetCache(“cacheName”)

我目前正在尝试以下操作: cache.GetObjectsInRegion(“cacheName”).Count()


我意识到一个区域不同于一个命名缓存,但我没有看到任何其他方法可以让我实现这一点(尽管我确信有)。有什么想法吗?

这并不像你想象的那么简单,但它是可以做到的

将对象添加到AppFabric缓存时,无论是否指定区域,它都会进入区域。创建缓存时,会创建一组默认区域(在我的测试设备上有1024个,
default\u Region\u 0000
default\u Region\u 0001
等等),我假设,当项目添加到缓存时,会有一些算法确定它们进入哪个区域

因此,要查找命名区域外缓存中的对象总数,需要为每个默认区域运行GetObjectsInRegion:

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

考虑到这1024个区域的复杂性,我认为您可以提出一个令人信服的理由,即每个对象都应该在一个命名区域中:这样做实际上没有成本,而且一个潜在的好处是可以更容易地看到缓存中有多少对象。如果这是您的常见需求,您也可以考虑将其作为DataCache类的扩展方法。

非常有用。命名区域不会分布在参与节点之间,这大大降低了分布式集群的价值。LINQified:
cache.GetSystemRegions()。选择many(regionName=>cache.GetObjectsInRegion(regionName)).Count()