2010-12-29 2 views
4

C#の[MethodImpl(MethodImplOptions.NoInlining)]メソッド属性は、配列を操作するときのパフォーマンスに影響を及ぼしますか?C#の[MethodImpl(MethodImplOptions.NoInlining)]メソッドの属性は、配列を操作するときのパフォーマンスにどのように影響しますか?

私はint[][] - ギザギザの配列を反復する方法があります。この属性の有無にかかわらず、パフォーマンス測定でも同じ効果が得られました。

ギザギザのアレイで作業する場合、インラインで改善する必要がありますか?

答えて

4

通常、単一のメソッド呼び出しのコストを隠すために十分高価である2次元配列を反復処理:

これは、ルールの便利な概要です。とにかく属性がなくても、マシンコードが多すぎるため、メソッドがインライン化されない可能性があります。

しかし、見てください。ツール+オプション、デバッグ、全般、untick "モジュールロード時のJIT最適化を抑制する"リリースビルドを選択します。メソッド呼び出しにブレークポイントを設定して実行します。ブレークしたら、ソースコードを右クリックして[逆アセンブリに移動]をクリックします。コール命令が表示された場合、インライン化されませんでした。メソッドが引数を取る場合は、呼び出しの前にマシンコードがいくつか表示されることがあります。

+0

MSVS2010では、アセンブリではなく、「分解してください」*です。 +1 BTW! – Nawaz

2

属性があるかどうかにかかわらず、JITにはいくつかの制限があります(すべてのメソッドがインライン化できるわけではありません。つまり、構造化引数を持つメソッドではありません)制御フローの使用法、バイトコードの命令カウントなどに基づくいくつかのヒューリスティックがあります)。 http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx

関連する問題