次の方法で共有


リンクされたキャッシュ エントリの追跡

MemoryCache は、オプションが伝達されるように、リンクされたキャッシュ エントリを追跡します。 次の例では、expirationTokenに追加されたchildparentに適用されます。

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