2010-11-19 15 views
4

J'ai un cache nommé et je veux simplement retourner (par programmation) son nombre d'objets. J'ai un objet DataCache: cache = factory.GetCache ("cacheName");AppFabric obtiennent le nom de l'objet cache nommé

J'essaie actuellement ce qui suit: cache.GetObjectsInRegion ("cacheName"). Count(); Je me rends compte qu'une région est différente d'un cache nommé, mais je ne vois pas d'autres méthodes qui me permettraient d'y parvenir (même si j'en suis sûr). Des pensées?

Répondre

8

Ce n'est pas aussi simple que ce à quoi vous vous attendiez, mais c'est faisable.

Lorsqu'un objet est ajouté à un cache AppFabric, il entre dans une région, que vous spécifiez ou non la région. Lorsqu'un cache est créé, un ensemble de régions par défaut est créé (1024 d'entre elles sur mon banc d'essai, Default_Region_0000, Default_Region_0001 et ainsi de suite), et comme des éléments sont ajoutés au cache, il y a, je suppose, un algorithme qui détermine lequel les régions dans lesquelles ils vont.

Ainsi, pour trouver le nombre total d'objets dans le cache en dehors des régions nommées, vous devez exécuter GetObjectsInRegion pour chacune des régions par défaut:

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

Compte tenu de la complexité de ces 1024 régions, je pense que vous pourriez faire un cas convaincant que chaque objet devrait être dans une région nommée: il n'y a effectivement aucun coût pour le faire, et un avantage potentiel dans ce qu'il devient plus facile de voir combien d'objets sont dans le cache. Si cela est une exigence commune pour vous, vous pouvez également envisager d'en faire une méthode d'extension sur la classe DataCache.

+0

Fonctionne comme un charme, très apprécié. – downatone

+6

Les régions nommées ne distribuent pas entre les nœuds participants, dévaluant considérablement le cluster distribué. – andrewbadera

+3

LINQified: 'cache.GetSystemRegions(). Sélectionnez Multiple (regionName => cache.GetObjectsInRegion (regionName)). Count()' –