私は高価なサービスコールからコレクションを取得し、それをキャッシュに保存してUIの後続の操作に使用できるようにするという問題を見ています。次のように私が使用しているコードは次のとおりです。予期せずメモリキャッシュが上書きされる
List<OrganisationVO> organisations = (List<OrganisationVO>)MemoryCache.Default["OrganisationVOs"];
List<Organisation> orgs = new List<Organisation>();
if (organisations == null)
{
organisations = new List<OrganisationVO>();
orgs = pmService.GetOrganisationsByName("", 0, 4000, ref totalCount);
foreach (Organisation org in orgs)
{
OrganisationVO orgVO = new OrganisationVO();
orgVO = Mapper.ToViewObject(org);
organisations.Add(orgVO);
}
MemoryCache.Default.AddOrGetExisting("OrganisationVOs", organisations, DateTime.Now.AddMinutes(10));
}
List<OrganisationVO> data = new List<OrganisationVO>();
data = organisations;
if (!string.IsNullOrEmpty(filter) && filter != "*")
{
data.RemoveAll(filterOrg => !filterOrg.DisplayName.ToLower().StartsWith(filter.ToLower()));
}
私が直面してる問題はdata.RemoveAll操作がキャッシュされたバージョンに影響を与えることがあります。つまり、キャッシュされたバージョンにサービスコールによって返された完全なデータセットが常に反映されるようにします。フィルタを設定して適用するとキャッシュからこのコレクションを取得したいが、キャッシュされたデータは変更しないでください。つまり、後続のフィルタは完全なデータセットで実行する必要があります。
おかげで魔法のように動作します:) – user1133512