Pregunta

¿Qué es la alineación?

¿Para qué se utiliza?

¿Puedes insertar algo en C #?

¿Fue útil?

Solución

Qué es

En los términos de C y C ++, utiliza la palabra clave en línea para indicarle al compilador que llame a una rutina sin la sobrecarga de insertar parámetros en la pila. En su lugar, la función tiene su código de máquina insertado en la función donde se llamó. Esto puede crear un aumento significativo en el rendimiento en ciertos escenarios.

Peligros

La velocidad se beneficia al usar " inlining " disminuye significativamente a medida que aumenta el tamaño de la función en línea. El uso excesivo en realidad puede hacer que un programa se ejecute más lentamente. Incluir una función de acceso muy pequeña generalmente disminuirá el tamaño del código, mientras que incluir una función muy grande puede aumentar drásticamente el tamaño del código.

Incorporación en C #

En C #, la alineación ocurre en el nivel JIT en el que el compilador JIT toma la decisión. Actualmente no hay ningún mecanismo en C # que pueda hacer esto explícitamente. Si desea saber qué está haciendo el compilador JIT, puede llamar a: System.Reflection.MethodBase.GetCurrentMethod (). Name en tiempo de ejecución. Si el Método está en línea, devolverá el nombre de la persona que llama.

En C # no puede forzar un método para que se incorpore, pero puede forzar un método para que no lo haga. Si realmente necesita acceso a una pila de llamadas específica y necesita eliminar la alineación, puede usar: MethodImplAttribute con MethodImplOptions.NoInlining . Además, si un método se declara como virtual, el JIT tampoco lo incluirá. La razón detrás de esto es que el objetivo final de la llamada es desconocido.

Más información sobre la integración

Otros consejos

Para la definición y discusión de la alineación, vea esta pregunta .

En C # no necesita indicarle al compilador o al tiempo de ejecución que se conecte en línea porque el tiempo de ejecución lo hará automáticamente.

P.S. Esta respuesta también es correcta para Java.

La alineación es cuando, en lugar de llamar a una función en particular, el contenido de la función se realiza directamente en el sitio de la llamada. La razón principal para hacer esto es que elimina la sobrecarga de llamar a una función ejecutando el contenido de la función en el sitio de llamadas.

Se utiliza como técnica de optimización. En el caso de C #, en realidad depende del motor CLR JIT para hacer el trabajo. En tiempo de ejecución, al compilar un método, el motor JIT usará una heurística para determinar si una función en línea es apropiada y será una optimización eficiente. Si es así, se realiza una línea.

Vance tiene un gran artículo sobre lo que el JIT considera al incluir: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to- inline-that-is-the-question.aspx

No hay forma de forzar una línea en C #. El lenguaje no es compatible con esta construcción. Principalmente porque las personas son jueces muy pobres de lo que debe optimizarse. El JITer es un juez mucho mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top