2016-02-03 11 views
5

.sの指示をどこから出すことができるのか本当に気にする必要がありますか?それともサイズにのみ影響しますが、実際のパフォーマンスは同じになりますか?短い命令のほうがパフォーマンスが良いですか?

生成されたdllはAOTプラットフォームでも使用されます。結果として得られるAOT-edのdllは、.sとILなしで同じであるでしょうか?

私は

+1

コードを共有してください。 '.s'命令の意味を明確にしていません。 – HimBromBeere

+4

@HimBromBeere - 例。 [beq](https://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.beq(v = vs.110).aspx)vs [beq.s](https:// msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.beq_s(v=vs.110).aspx) –

+0

.s接尾辞は、ILの圧縮のみを許可すると考えています。中間コード。これは、潜在的にダウンロード時間に少し削減する可能性があります。ウェブソリューションでレンダリングされたマシンコードには何の影響もないと私は信じています。 –

答えて

1

... br.sldloca.s、などを意味それは依存しています。 .sの主な目的(およびldc.i4.1のような文字通りのオペレーションコード)は、コードのサイズを減らすことに過ぎず、メソッドのサイズを小さくする利点は、CILからネイティブコードを生成するときにメソッドをインライン化できるようにすることです呼び出しメソッド(x86ジッタの制限は32バイトのILです)。したがって、インライン候補メソッドで使用されている場合、短い命令ではアプリケーションのパフォーマンスが向上する可能性があります。

それ以外の場合は、実行されるCILではないため、短いオペコードと通常のオペコードの両方によって生成されるマシンコードは、同じネイティブコード(可能な場合は最適化されたもの)である必要があります。

+1

MSILのサイズは、メソッドがインライン化されるかどうかとは関係ありません。マシンコードのサイズだけがそれに影響します。 –

+0

メソッドのバイト数を減らすことで、メソッドをインライン化することは可能ですか?私はそれがIL命令**カウント**に依存するかもしれないと思ったがサイズではない。 – Vlad

+1

@HansPassant [this](http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx)の記事によれば、 "インラインのサイズはILの32バイトに制限されています* " JITterに依存しているのは事実ですが、少なくとも3つの記事でこの制限が言及されています。また、インライン化されたメソッドとインライン化されていないメソッドのマシンコードが、パラメータに関連する最適化によって異なる場合、マシンコードのサイズはどのように影響を受けますか? – IllidanS4

関連する問題