2013-10-21 10 views
14

C#アプリケーションのプロファイリング中に、私は 'ThePreStub'というシステム(?)メソッドでかなりのCPU使用量を見ます。これは何ですか?C#プログラムでThePreStubとは何ですか?

+1

あなたが試したもの、見つけたもの、その情報が十分でない理由を示してください。 "ThePreStub"の最初のいくつかのWeb検索結果では、CLRがどのように動作するかについて**多くの**説明があります。 – CodeCaster

+6

@コードキャスター - あなたのコメントに続いて、私は実験を行い、 "ThePreStub"のための* Google *があれば、多くの良い情報を得ることがわかりました。残念ながら、私はもともとBingをデフォルトプロバイダとしてWindows VMを検索しようとしていましたが、実際には何も見つかりませんでした。学んだ教訓。 – Eric

答えて

16

参照:クロスアセンブリ参照:CLR Inside out - The Performance Benefits of NGen.

NGENコンパイルされたコードのスループットは一つの理由のために主にJITコンパイル コードのそれよりも低いです。 JITコンパイルされたコードでは、これらの参照の正確なアドレス が実行時にわかるので、クロスアセンブリ参照は 直接呼び出しまたはジャンプとして実装できます。静的にコンパイルされたコードの場合はですが、 クロスアセンブリリファレンスは、 プリスタブを実行することで、実行時に に正しいアドレスが格納されるジャンプスロットを経由する必要があります。メソッドプレスタブは、とりわけ、そのメソッドによって参照されるアセンブリのネイティブイメージが のアセンブリに確実にロードされ、メソッドが実行される前にメモリに がロードされます。プリスタブは、最初にメソッドが呼び出されたときに実行する必要があるのは です。それ以降の呼び出しのために短絡されたのは です。ただし、 メソッドが呼び出されるたびに、クロスアセンブリ参照は レベルの間接参照を経由する必要があります。これは、主に、NGJITコンパイルコードと比較した場合、NGenコンパイルコードのスループットが5-10 パーセント低下したことを主な原因としています。

関連する問題