2009-03-15 5 views

Répondre

25

Qu'est-ce qu'il est

Aux termes de C et C++ que vous utilisez le mot-clé en ligne pour indiquer au compilateur d'appeler une routine sans les frais généraux de pousser les paramètres sur la pile. La fonction a plutôt son code machine inséré dans la fonction où elle a été appelée. Cela peut entraîner une augmentation significative des performances dans certains scénarios.

Dangers

Les avantages de la vitesse à l'aide de diminution « inline » de manière significative la taille de l'augmentation de la fonction en ligne. Une utilisation excessive peut en fait ralentir un programme. Inlining une très petite fonction d'accessoiriste diminuera généralement la taille du code tandis qu'inlining une très grande fonction peut considérablement augmenter la taille du code.

Inlining en C#

En C# inline se produit au niveau JIT dans lequel le compilateur JIT prend la décision. Il n'y a actuellement aucun mécanisme en C# que vous pouvez faire explicitement. Si vous souhaitez savoir ce que fait le compilateur JIT, vous pouvez appeler: System.Reflection.MethodBase.GetCurrentMethod().Name lors de l'exécution. Si la méthode est en ligne, elle renvoie le nom de l'appelant à la place. En C#, vous ne pouvez pas forcer l'insertion d'une méthode, mais vous pouvez forcer une méthode à ne pas le faire. Si vous avez vraiment besoin d'accéder à une callstack spécifique et que vous devez supprimer inline, vous pouvez utiliser: MethodImplAttribute avec MethodImplOptions.NoInlining. De plus, si une méthode est déclarée virtuelle, elle ne sera pas non plus insérée par le JIT. La raison derrière cela est que la cible finale de l'appel est inconnue.

More on inlining

+3

Pour être plus correct, vous n "t" dire au compilateur, "vous" faire une suggestion au compilateur qu'il peut ou peut ne pas tenir compte. " –

1

Pour la définition et la discussion de l'inlining, see this question. En C#, vous n'avez pas besoin de demander au compilateur ou à l'exécution d'être en ligne car l'exécution se fera automatiquement.

P.S. Cette réponse est également correcte pour Java.

1

Inlining est quand au lieu d'appeler une fonction particulière, le contenu de la fonction sont effectuées directement sur le site d'appel. La raison principale pour cela est qu'il supprime le surcoût d'appel d'une fonction en exécutant le contenu de la fonction sur le site d'appel.

Il est utilisé comme technique d'optimisation. Dans le cas de C#, il dépend du moteur CLR JIT de faire le travail. Lors de l'exécution, lors de la compilation d'une méthode, le moteur JIT utilisera une heuristique pour déterminer si une fonction en ligne est appropriée et sera une optimisation efficace. Si c'est le cas, une ligne est effectuée.

Vance a un article sur ce que le JIT considère quand inline: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to-inline-that-is-the-question.aspx

Il n'y a aucun moyen de forcer une ligne en C#. Le langage ne supporte pas cette construction. Principalement parce que les gens sont très pauvres juges de ce qui devrait être optimisé. Le JITer est un bien meilleur juge.