私は営業地域の統計を取得するサービスを持っています。サービスはすべての領域の統計を計算し、そのコレクションをキャッシュし、要求された領域のみを返します。MemoryCacheClientは他のものと動作が異なります - 参照は保持されます
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;
}
私が発見だと、私は、ラインtots.Records.RemoveAll(...)(私はユニットテストのために使用StaticAppHostの一部として)MemoryCacheClientを使用する場合、実際にオブジェクトに影響を与えることがありますキャッシュ。これは、キャッシュされたオブジェクトを取得し、行を削除した後、キャッシュにすべての領域が含まれていないことを意味します。したがって、他の地域のこのサービスへのその後の呼び出しでは、レコードは返されません。通常のCacheを使用する場合、Cache.Get()はキャッシュ内のオブジェクトの新しいコピーを作成し、そのオブジェクトからレコードを削除してもキャッシュには影響しません。