Question

Autant que je sache, il n’ya aucun moyen de suggérer au compilateur c # d’intégrer une fonction particulière et j’imagine que c’est comme ça par conception.

Je pense aussi que ne pas laisser le programmeur spécifier ce qu’il faut insérer ou non est en général une bonne idée, car cela impliquerait que vous pensiez être plus intelligent que le compilateur JIT (mes respects à ceux qui le sont réellement), mais que se passe-t-il si je veux préciser qu'une partie critique du code doit être extrêmement rapide à tout prix, quelle que soit la méthode utilisée pour la réaliser sur la machine cible? Pour le moment, vous ne pouvez pas faire une chose pareille et je me demande si les langages c # et JIT ne prendront jamais en charge cette fonctionnalité.

Dans mon cas, je connais la machine cible et je sais que l’inclusion de fonctions contribuera à améliorer les performances. Cela me laisse penser que le seul moyen de renforcer l’intégration des fonctions consiste à savoir dans quelles circonstances l’ECM le fera, mais je ne pense pas que ce soit une bonne idée non plus,

Toute lumière sur le sujet serait très appréciée.

Merci.

Était-ce utile?

La solution

La situation a un peu changé avec l'avènement de .Net 4.5.

Vous pouvez maintenant décorer une méthode avec l'attribut [MethodImplAttribute (MethodImplOptions.AggressiveInlining)] qui le rendra si possible en ligne dans le JIT.

Voir ce blog pour plus de détails.

Autres conseils

Réponse courte: non

Réponse longue: http: //blogs.msdn. com / ericgu / archive / 2004/01/29 / 64644.aspx

Critères d'inclusion: http: //blogs.msdn .com / davidnotario / archive / 2004/11/01 / 250398.aspx et http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx

Notez que dans les deux derniers liens sur les critères d'inline, celui sur les structures qui ne sont pas inlines est obsolète; Des informations mises à jour sont disponibles à l'adresse suivante: http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in -version-v3-5-sp1.aspx

J'ai récemment comparé ceci:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg (Plus haut est pire)

Comme vous pouvez le constater, le CLR et la JVM sont bien meilleurs en matière d’inclusion de méthodes que vous ne le serez jamais.

if(performance < ACCEPTABLE){
   if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){
      if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){
          return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt();
      }
   }
 }
 return dontWorryAboutIt();

Si vous exécutez ce chemin rare, sortez votre C ou votre ASM.

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