c# - studio - "Evitar asignaciones en rutas de acceso de compilación" Convenciones de codificación de Roslyn
generar documentacion visual studio 2017 (2)
La "ruta de acceso" es la ruta de código que es más crítica para el rendimiento. Son los fragmentos de código los que se ejecutan millones o miles de millones de veces por segundo, que ocupan la mayor parte del tiempo de ejecución.
Mientras lo leo, los otros dos son solo ejemplos de situaciones que pueden causar asignaciones implícitas y, por lo tanto, deben evitarse en las partes críticas del código.
He estado leyendo a través de la sección Código de contribución de la plataforma del compilador .NET ("Roslyn"), y encontré las pautas para las convenciones de codificación. Entiendo la mayoría de las convenciones de codificación y por qué lo solicitarían. Pero no entiendo lo que quieren decir con esto:
Evitar las asignaciones en las rutas de acceso del compilador:
Evite LINQ.
Evite utilizar foreach sobre colecciones que no tengan un enumerador de estructura.
¿Qué es un "camino de compilación en caliente"? ¿Y por qué debo evitar el uso de LINQ y evitar hacer un foreach sobre colecciones que no tienen un enumerador de estructura?
Las rutas de acceso del compilador son rutas de ejecución de código en el compilador en las que se gasta la mayor parte del tiempo de ejecución y que se ejecutan potencialmente muy a menudo.
La razón para evitar las asignaciones (montón) en estas rutas de código es que las asignaciones pueden desencadenar una recolección de elementos no utilizados, lo que puede causar un deterioro repentino y extremo del rendimiento. Obviamente, estos deben evitarse en las rutas de código ejecutadas con mucha frecuencia.
Linq y foreach
se distinguen porque estos asignarán memoria de manera implícita , a menos que GetEnumerator
devuelva una struct
, que no causará asignaciones de montón.