Ich habe einen Dienst, der Statistiken für eine Verkaufsregion abruft. Der Dienst berechnet die Statistiken für ALLE Regionen und speichert dann diese Sammlung und gibt dann nur die angeforderte Region zurück.MemoryCacheClient funktioniert anders als andere - Referenz beibehalten
public object Any(RegionTotals request)
{
string cacheKey = "urn:RegionTotals";
//make sure master list is in the cache...
base.Request.ToOptimizedResultUsingCache<RegionTotals>(
base.Cache, cacheKey, CacheExpiryTime.DailyLoad(),() =>
{
return RegionTotalsFactory.GetObject();
});
//then retrieve them. This is all teams
RegionTotals tots = base.Cache.Get<RegionTotals>(cacheKey);
//remove all except requested
tots.Records.RemoveAll(o => o.RegionID != request.RegionID);
return tots;
}
Was ich bin Befund ist, dass, wenn ich ein MemoryCacheClient verwenden (als Teil eines StaticAppHost, die ich für Unit-Tests verwenden), die Linie tots.Records.RemoveAll (...) tatsächlich das Objekt wirkt sich in der Cache. Das bedeutet, dass ich das zwischengespeicherte Objekt abrufe, Zeilen lösche und der Cache dann nicht mehr alle Regionen enthält. Daher geben nachfolgende Aufrufe an diesen Dienst für jede andere Region keine Datensätze zurück. Wenn ich meinen normalen Cache benutze, erstellt der Cache.Get() natürlich eine neue Kopie des Objekts im Cache, und das Entfernen von Datensätzen von diesem Objekt hat keine Auswirkungen auf den Cache.