共用方式為


追蹤連結快取項目

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.TrackLinkedCacheEntriestrue

var options = new MemoryCacheOptions
{
    TrackLinkedCacheEntries = true
};

var cache = new MemoryCache(options);

受影響的 API