MemoryCache は、オプションが伝達されるように、リンクされたキャッシュ エントリを追跡します。 次の例では、expirationTokenに追加されたchildも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
.NET