Question

Qu'est-ce que l'inline?

À quoi sert-il?

Pouvez-vous insérer quelque chose en C #?

Était-ce utile?

La solution

De quoi s'agit-il

Dans les termes de C et C ++, vous utilisez le mot-clé inline pour indiquer au compilateur d'appeler une routine sans la surcharge liée à l'insertion de paramètres dans 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 l’utilisation de " inlining " diminuer de manière significative à mesure que la taille de la fonction en ligne augmente. 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 incrustation d'une très grande fonction peut considérablement augmenter la taille du code.

Inline in 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 à l'exécution. Si la méthode est en ligne, le nom de l'appelant sera renvoyé.

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 pile d'appels spécifique et que vous devez supprimer l'inline, vous pouvez utiliser: MethodImplAttribute 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 en est que la cible finale de l'appel est inconnue.

En savoir plus sur l'inlining

Autres conseils

Pour une définition et une discussion de l'intégration, voir cette question .

En C #, vous n'avez pas besoin d'indiquer au compilateur ou à l'exécution l'exécution de s'inscrire en ligne, car l'exécution le fera automatiquement.

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

L'inline est quand au lieu d'appeler une fonction particulière, le contenu de la fonction est fait directement sur le site d'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 fait du moteur CLR JIT pour effectuer le travail. 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 tel est le cas, une opération en ligne est effectuée.

Vance a rédigé un excellent article sur les éléments pris en compte par le JIT lors de l'intégration: 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 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top