Ngenを使用したら、使用前よりもパフォーマンスが劣化する現象が発生しました。
以下に現象を説明します。
C#で作成したクラスライブラリをCOM登録して、C++モジュールから呼び出すアプリケーションを開発しました。
C#で作成したクラスライブラリをC++モジュールから呼び出したとき、初回に限りパフォーマンス劣化が発生していました。
これは初回の.NET Frameworkのロード、JITの発生と考えて、Ngenを使用して、C#生成のクラスライブラリをネイティブファイルに変換しました。
この結果、3秒ほど、Ngenを使用した場合に遅くなってしまいました。
このようなことがありえるのでしょうか?
環境は、C#/Visual Studio 2005、OSはWinXP SP2です。
よろしくお願いします。
masakiyさんの<9D55EFB1-C08E-4013...@microsoft.com>から
>これは初回の.NET Frameworkのロード、JITの発生と考えて、Ngenを使用して、C#生成のクラスライブラリをネイティブファイルに変換しました。
>この結果、3秒ほど、Ngenを使用した場合に遅くなってしまいました。
あります。
NGEN:事前のNativeコードであって、最適化が優れていません。
JIT:メソッド単位にJITコンパイルされ、最適化が行われます。
従ってNGENをするのは、実行時のオーバーヘッドの削減を目的とするだけで
す。JITでもメソッドのコンパイルやコンストラクタ、型コンストラクタ(静的
データ型)などのどの部分で時間が掛っているかを調べないと、単純にどこが
遅いかを指摘することが困難です。
このためプロファイリングをされることをお勧めします。