6

私の知る限り、特定の関数をインライン化するようにc#コンパイラにヒントを与える方法はありません。これは、設計上、そのようなものだと思います。

また、プログラマーにインライン化するものとそうでないものを指定させないことは、一般的には良い考えだと思います。これは、JITコンパイラーよりも賢いと思うことを意味するためです(実際の人には敬意を表します)。ターゲットマシンでどのようにそれを達成するかに関係なく、コードの重要な部分がどんな犠牲を払っても非常に高速である必要があることを指定したい場合はどうでしょうか。今のところ、そのようなことはできません。c#言語とJITの両方がこの機能をサポートするのではないかと思います。

私の場合、ターゲットマシンが何であるかを知っており、関数のインライン化がパフォーマンスの向上に役立つことを知っています。これにより、関数のインライン化を強制する唯一の方法は、JITがどのような状況でそれを実行するかを知ることだと思いますが、それも良い考えではないと思います。

主題に関するどんな光でも大いに感謝されるでしょう。

ありがとう。

4

5 に答える 5

10

簡単な答え:いいえ

長い答え: http: //blogs.msdn.com/ericgu/archive/2004/01/29/64644.aspx

インライン化の基準:http://blogs.msdn.com/davidnotario/archive/2004/11/01/250398.aspxおよびhttp://blogs.msdn.com/ericgu/archive/2004/01/29/64717。 aspx

インライン化の基準に関する最後の2つのリンクでは、構造体がインライン化されていないことに関するリンクが古くなっていることに注意してください。更新された情報は次の場所にあります:http://blogs.msdn.com/vancem/archive/2008/05/12/what-s-coming-in-net-runtime-performance-in-version-v3-5-sp1 .aspx

于 2008-10-29T23:39:58.820 に答える
4

私は最近これをベンチマークしました:

http://www.gfilter.net/junk/BubblesortBenchmark.jpg(高いほど悪い)

お分かりのように、CLRとJVMはどちらも、メソッドのインライン化がこれまでよりもはるかに優れています。

于 2008-10-29T23:43:52.260 に答える
4

.Net 4.5 の登場により、状況は少し変わりました。

[MethodImplAttribute(MethodImplOptions.AggressiveInlining)]可能であれば、メソッドを JIT によってインライン化される属性でメソッドをデコレートできるようになりました。

詳しくはこちらのブログをご覧ください。

于 2012-12-14T10:40:12.540 に答える
3
if(performance < ACCEPTABLE){
   if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){
      if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){
          return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt();
      }
   }
 }
 return dontWorryAboutIt();

そのまれなパスを実行している場合は、C または ASM を分割します。

于 2008-10-30T00:43:23.230 に答える
1

代替テキスト http://web.ics.purdue.edu/~ssanty/images/1.gif

于 2008-10-29T23:54:39.040 に答える