2012-02-25 4 views
0

私はいくつかの.netアセンブリを取って、マシンでそれを実行する=> JITはコードをネイティブに変換して実行します。 私はアプリケーションを停止して再度実行するとJITに(再び)ロードされ、JITはそれを再び変換して実行します。.netコードが初めて実行されるのはなぜですか?> 2番目の速度が遅くなるのはなぜですか?

なぜ、アプリケーションの2回目の実行が最適化され、フェスターになるのでしょうか? JITは何とか最初のネイティブコードを保存しますか?そして、ILからネイティブコードにコードを再度変換する必要はありませんか?その 'はい'の場合、変換されたコード(ネイティブ)が保存される場所は?

+1

あなたが書いたコードだけでなく、アプリケーションを実行するために.netがロードする必要があるすべてのライブラリを考慮する必要があります。だから、いったんメモリにロードされると、はるかに速くなります。 – ChandlerPelhams

+0

可能な複製:http://stackoverflow.com/questions/3295622/is-the-net-jit-compiled-code-cached-where – Andreas

+0

シンプルなディスクキャッシュが多くを説明するかもしれない... –

答えて

2

おそらくメモリにあります。あなたがやっていることは、システム(ディスク、OS、など)によってさまざまな場所にキャッシュされているので、あなたが何かをやっているのはかなり早いです。

私が「それ」と言うとき、私はあなたの.NETアプリケーションを実行させるのに必要なファイルとライブラリの完全な連鎖を意味します。

+0

と私はキャッシュをクリーニングする場合(キャッシュはRAMだと仮定)?ネイティブのコードはクリーンアップされています。そして、それはまだ2回目にフェスターを実行すると思われます。 – Yanshof

+1

私がキャッシュと言うとき、私は非常に広い意味でそれを意味します。ディスクコントローラはファイルをキャッシュしてプラッタから読み込まないようにし、OSはファイルをキャッシュしてディスクなどに移動する必要はありません。キックインするキャッシュ。 –

+1

* 2回目では高速ではありません。 –

関連する問題