Fonctions en ligne

Qu’est-ce que l’inline?

A quoi cela sert?

Pouvez-vous aligner quelque chose en C #?

Ce que c’est

En termes de C et de C ++, vous utilisez le mot-clé inline pour indiquer au compilateur d’appeler une routine sans la surcharge d’afficher des parameters dans la stack. À la place, la fonction a 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.

Les dangers

L’utilisation de la fonction “inline” présente des avantages plus rapides en termes de rapidité avec l’augmentation de la taille de la fonction inline. Une utilisation excessive peut en réalité ralentir un programme. L’inclusion d’une très petite fonction d’accesseur entraîne généralement une réduction de la taille du code, tandis qu’une inclusion d’une très grande fonction peut considérablement augmenter la taille du code.

Inline en C #

En C #, l’inline se produit au niveau JIT dans lequel le compilateur JIT prend la décision. Il n’existe actuellement aucun mécanisme en C # permettant de le faire explicitement. Si vous souhaitez savoir ce que fait le compilateur JIT, vous pouvez appeler: System.Reflection.MethodBase.GetCurrentMethod().Name au moment de l’exécution. Si la méthode est en ligne, elle renverra le nom de l’appelant.

En C #, vous ne pouvez pas forcer une méthode à s’inscrire mais vous pouvez forcer une méthode à ne pas le faire. Si vous avez vraiment besoin d’accéder à une stack d’appels spécifique et que vous devez supprimer l’inline, vous pouvez utiliser: MethodImplAtsortingbute avec MethodImplOptions.NoInlining . De plus, si une méthode est déclarée comme 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.

Plus sur l’inline

Pour la définition et la discussion de l’inline, voir cette question .

En C #, vous n’avez pas besoin d’instruire le compilateur ou le run-time pour qu’il soit en ligne car le run-time le fera automatiquement.

PS Cette réponse est également correcte pour Java.

En ligne, c’est quand au lieu d’appeler une fonction particulière, le contenu de la fonction est effectué directement sur le site de l’appel. La raison principale en est que cela supprime la surcharge liée à l’appel d’une fonction en exécutant le contenu de la fonction sur le site d’appels.

Il est utilisé comme technique d’optimisation. Dans le cas de C #, cela dépend en réalité du moteur CLR JIT. Au moment 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 constituera une optimisation efficace. Si c’est le cas, un inline est effectué.

Vance a rédigé un excellent article sur ce que le JIT considère en intégrant: -question.aspx

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

Pour citer Eric Gunnerson

l’inline se produit au niveau de l’ECE, et l’ECE prend généralement une décision décente