¿Qué está en línea?Funciones de encuadernación
¿Para qué se utiliza?
¿Puedes poner algo en línea en C#?
¿Qué está en línea?Funciones de encuadernación
¿Para qué se utiliza?
¿Puedes poner algo en línea en C#?
Qué es
En los términos de C y C++ que utiliza la palabra clave en línea para decirle al compilador para llamar a una rutina sin el añadido de empujar parámetros en la pila. En su lugar, la función tiene su código de máquina insertado en la función a la que se llamó. Esto puede crear un aumento significativo en el rendimiento en ciertos escenarios.
Peligros
Los beneficios de velocidad en el uso de "inlining" disminución significativamente a medida que el tamaño de los aumentos de función en línea. El uso excesivo puede hacer que un programa se ejecute más lento. Alinear una función de acceso muy pequeña generalmente disminuirá el tamaño del código, mientras que una función muy grande puede aumentar drásticamente el tamaño del código.
Inlining en C#
En C# inlining sucede a 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 al: 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 alinear pero puede forzar un método para no hacerlo. Si realmente necesita acceder a una pila de llamadas específica y necesita eliminar la línea interior, 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.
Para ser más correctos, Don 't "le dice al compilador," usted "hace una sugerencia al compilador que puede o no tener en cuenta". –
Para la definición y discusión de inline, see this question.
En C# no necesita indicar el compilador o el tiempo de ejecución en línea porque el tiempo de ejecución lo hará automáticamente.
P.S. Esta respuesta también es correcta para Java.
Inlining es cuando en lugar de llamar a una función en particular, el contenido de la función se realizan directamente en el sitio de llamada. La razón principal para hacer esto es que elimina la sobrecarga de llamar a una función ejecutando los contenidos de la función en el callsite.
Se utiliza como una técnica de optimización. En el caso de C#, realmente 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 que la expansión en línea: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to-inline-that-is-the-question.aspx
No hay manera de forzar una línea en C#. El lenguaje no admite esta construcción. Principalmente porque las personas son jueces muy pobres de lo que debería optimizarse. El JITer es un juez mucho mejor.
Para citar Eric Gunnerson
inlining happens at the JIT level, and the JIT generally makes a decent decision
Véase también esta pregunta: –