追蹤連結快取項目
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);