出于性能原因,我使用 .NET system.runtime.caching 缓存大量对象。我正在缓存来自 EF 数据上下文的实体。我正在处理数据上下文,但由于来自它的实体在缓存中,这是否意味着 GC 将无法收集它?
示例代码:
public static Menu GetMenu(string menuName, string languageCode)
{
ObjectCache cache = MemoryCache.Default;
var menu = (Menu)cache[menuName + "cache"];
if (menu == null)
{
using (PageDb db = new PageDb())
{
menu = db.Menus.Where(m => m.Name == menuName && m.LanguageCode == languageCode).FirstOrDefault();
}
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddMonths(1);
cache.Set(menuName + "cache", menu, policy);
}
return menu;
}
如您所见,我在缓存中存储了一个菜单对象,但它来自 PageDb 数据上下文。菜单对象应该在内存中保留 1 个月,但是 PageDb 数据上下文呢?