¿Funciones en línea en C#?

Resuelto Dinah asked hace 15 años • 13 respuestas

¿Cómo se realizan "funciones en línea" en C#? No creo entender el concepto. ¿Son como métodos anónimos? ¿Te gustan las funciones lambda?

Nota : Las respuestas tratan casi en su totalidad de la capacidad de incorporar funciones , es decir, "una optimización manual o del compilador que reemplaza un sitio de llamada de función con el cuerpo del destinatario". Si está interesado en funciones anónimas (también conocidas como lambda) , consulte la respuesta de @jalf o ¿Qué es este 'Lambda' del que todo el mundo sigue hablando? .

Dinah avatar Jan 24 '09 00:01 Dinah
Aceptado

Finalmente, en .NET 4.5, CLR permite insinuar/sugerir 1 método insertado usando MethodImplOptions.AggressiveInliningel valor. También está disponible en el maletero del Mono (comprometido hoy).

// The full attribute usage is in mscorlib.dll,
// so should not need to include extra references
using System.Runtime.CompilerServices; 

...

[MethodImpl(MethodImplOptions.AggressiveInlining)]
void MyMethod(...)

1 . Anteriormente aquí se utilizaba "fuerza". Intentaré aclarar el término. Como en los comentarios y la documentación, The method should be inlined if possible.especialmente considerando Mono (que está abierto), existen algunas limitaciones técnicas monoespecíficas considerando la incorporación en línea o una más general (como funciones virtuales). En general, sí, esta es una pista para el compilador, pero supongo que eso es lo que se pidió.

konrad.kruczynski avatar Jan 05 '2012 16:01 konrad.kruczynski

Los métodos en línea son simplemente una optimización del compilador en la que el código de una función se introduce en la persona que llama.

No existe ningún mecanismo para hacer esto en C#, y deben usarse con moderación en los lenguajes donde son compatibles; si no sabes por qué deberían usarse en algún lugar, no deberían serlo.

Editar: Para aclarar, hay dos razones principales por las que deben usarse con moderación:

  1. Es fácil crear archivos binarios masivos usando inline en los casos en los que no es necesario.
  2. El compilador tiende a saber mejor que usted cuándo algo debe, desde el punto de vista del rendimiento, estar integrado.

Es mejor dejar las cosas como están y dejar que el compilador haga su trabajo, luego crear un perfil y determinar si en línea es la mejor solución para usted. Por supuesto, tiene sentido incluir algunas cosas (en particular, los operadores matemáticos), pero dejar que el compilador se encargue de ello suele ser la mejor práctica.

Serafina Brocious avatar Jan 23 '2009 17:01 Serafina Brocious