Seguimiento de entradas de caché vinculada

MemoryCache realiza un seguimiento de las entradas de caché vinculada para que se propaguen las opciones. En el ejemplo siguiente, el elemento expirationToken agregado para child también se aplica a parent:

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

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

Por motivos de rendimiento, .NET 7 ya no realiza un seguimiento de las entradas de caché vinculada de forma predeterminada. No obstante, puede habilitar el seguimiento mediante una nueva opción.

Versión introducida

.NET 7

Comportamiento anterior

Antes de .NET 7, MemoryCache realizaba un seguimiento de las entradas de caché vinculada para permitir la propagación de opciones. El seguimiento no se podía deshabilitar.

Comportamiento nuevo

A partir de .NET 7, MemoryCache no realiza el seguimiento de las entradas de caché vinculada de forma predeterminada. Se ha agregado la opción MemoryCacheOptions.TrackLinkedCacheEntries para controlar si se realiza un seguimiento de las entradas de caché vinculada o no.

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

Este cambio se ha incorporado para mejorar el rendimiento. El seguimiento interno usa AsyncLocal<T>, que es costoso y agrega una sobrecarga significativa.

Si desea que MemoryCache siga realizando el seguimiento de las entradas de caché vinculada para que se puedan propagar las opciones, establezca MemoryCacheOptions.TrackLinkedCacheEntries en true.

var options = new MemoryCacheOptions
{
    TrackLinkedCacheEntries = true
};

var cache = new MemoryCache(options);

API afectadas