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.
Fonctionne comme un charme, très apprécié. – downatone
Les régions nommées ne distribuent pas entre les nœuds participants, dévaluant considérablement le cluster distribué. – andrewbadera
LINQified: 'cache.GetSystemRegions(). Sélectionnez Multiple (regionName => cache.GetObjectsInRegion (regionName)). Count()' –