Compartir a través de


Asignaciones booleanas boxed

En este artículo se describe información de rendimiento para las asignaciones booleanas boxed.

Causa

Los valores booleanos boxing de .NET crean asignaciones de montón cada vez que se convierte un bool en un object tipo de interfaz o . Estas asignaciones, aunque pequeñas, pueden acumularse rápidamente en rutas de acceso de código críticas para el rendimiento y provocar una presión innecesaria en la recolección de elementos no utilizados, especialmente cuando los mismos valores booleanos se boxean repetidamente.

Descripción de la información de rendimiento

Cuando se boxiza un valor booleano, el tiempo de ejecución asigna un nuevo objeto en el montón para ajustar el tipo de valor. Puesto que solo hay dos valores booleanos posibles (true y false), la conversión boxing repetida de estos valores es desperdiciada. En lugar de permitir la conversión boxing implícita, es más eficaz almacenar en caché las instancias conversión boxing y reutilizarlas. Puede crear campos estáticos de solo lectura para los valores y boxing true y false devolver la instancia almacenada en caché adecuada cuando sea necesario el conversión boxing.

Cómo investigar una advertencia

Haga clic en el vínculo Investigar para ir a la vista Asignación que muestra los objetos booleanos con conversión boxed asignada. Al hacer doble clic en la asignación se muestran las rutas de acceso de código en las que se producen las asignaciones. Considere la posibilidad de reducir estas asignaciones almacenando en caché los valores booleanos con conversión boxing y devolviendo las instancias almacenadas en caché en lugar de permitir operaciones de conversión boxing repetidas.

Si Copilot está habilitado, verá el botón Ask Copilot Screenshot of Ask Copilot (Preguntar a Copilot) del botón Ask Copilot (Preguntar a Copilot). Seleccione el botón y Copilot proporciona un análisis detallado de los patrones de asignación y sugiere correcciones de código para optimizar el uso de memoria.

Este es un ejemplo de una asignación booleana boxed y su resolución:

Infracción:

class Example
{
    public object GetResult(bool condition)
    {
        return condition; // Implicit boxing occurs here
    }
}

Resolución:

class Example
{
    private static readonly object BoxedTrue = true;
    private static readonly object BoxedFalse = false;

    public object GetResult(bool condition)
    {
        return condition ? BoxedTrue : BoxedFalse;
    }
}

Recursos adicionales

Para obtener más información sobre cómo evitar asignaciones boxing y otros procedimientos recomendados de rendimiento, consulte los siguientes recursos:

Boxing y Unboxing (Guía de programación de C#)

CA1841: Preferir métodos Dictionary.Contains (análisis de código)

Al seguir estas instrucciones, puede asegurarse de que la aplicación está optimizada para el rendimiento y evita una sobrecarga de conversión boxing innecesaria.