Requisitos: Al revisar el código fuente de .NET, encontré que algunos métodos han añadido la función [MethodImpl(MethodImplOptions.AggressiveInlining)], pero vi que la función MethodImpl puede afectar el comportamiento del compilador JIT. Algunas pruebas se realizaron basándose en información de Internet.
Configuración de MethodImplOptions
Código:
Función en línea
En informática, una función en línea (a veces llamada función en línea o función de expansión en tiempo de compilación) es un constructo de lenguaje de programación utilizado para sugerir que el compilador puede extender en línea (a veces llamadas extensiones en línea) a algunas funciones especiales; Esto significa que el compilador inserta y reemplaza el cuerpo de la función especificado en lugar de cada lugar (contexto) donde se llama la función, ahorrando el tiempo adicional dedicado a cada llamada a la función. Sin embargo, al elegir usar funciones en línea, es necesario sopesar el espacio ocupado por el programa y la eficiencia de su ejecución, porque demasiadas funciones complejas para la expansión en línea generarán grandes gastos en recursos de almacenamiento. También es importante señalar que las extensiones en línea de funciones recursivas pueden causar una compilación infinita de algunos compiladores.
MethodImplOptions.AggressiveInlining
Función: Se recomienda que el compilador JIT integre el método en línea tanto como sea posible. Explicación: Inline se refiere a reemplazar una llamada a función por el propio cuerpo de la función, reduciendo así la sobrecarga de la llamada a la función. Escenarios aplicables: Adecuado para métodos pequeños y frecuentemente llamados (por ejemplo, accesorios de atributos, cálculos matemáticos simples, etc.). Nota: Esto es solo una "sugerencia", el compilador JIT puede decidir si realmente lo hace en línea o no, dependiendo de la situación real.
Los resultados de la prueba "en línea" y "no en línea" son los siguientes:
El código de prueba es el siguiente:
Se descubrió que el uso de CPU después de las llamadas en línea era mucho menor que el de las llamadas no en línea, de hecho, tambiénNo te preocupes demasiado, los compiladores actuales son muy inteligentes, incluso sin añadir esta función, el compilador puede ayudarte a optimizar automáticamente。 |