跟踪链接缓存条目

MemoryCache 跟踪链接缓存条目,以便传播选项。 在以下示例中,为 child 添加的 expirationToken 也应用于 parent

using (var parent = cache.CreateEntry(key))
{
    parent.SetValue(obj);

    using (var child = cache.CreateEntry(key1))
    {
        child.SetValue(obj);
        child.AddExpirationToken(expirationToken);
    }
}

出于性能原因,默认情况下,.NET 7 不再跟踪链接缓存条目。 但可以使用新选项启用跟踪。

引入的版本

.NET 7

旧行为

在 .NET 7 之前,MemoryCache 会跟踪链接缓存条目以允许传播选项。 无法禁用跟踪。

新行为

从 .NET 7 开始,MemoryCache 默认情况下不会跟踪链接缓存条目。 添加了 MemoryCacheOptions.TrackLinkedCacheEntries 选项,以便你可以控制是否跟踪链接缓存条目。

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

引入此更改是为了提高性能。 在内部跟踪会使用 AsyncLocal<T>,这很昂贵,并会增加不小的开销。

如果希望 MemoryCache 继续跟踪链接缓存条目以便传播选项,请将 MemoryCacheOptions.TrackLinkedCacheEntries 设置为 true

var options = new MemoryCacheOptions
{
    TrackLinkedCacheEntries = true
};

var cache = new MemoryCache(options);

受影响的 API