3

私たちの C# クライアント アプリケーションは、最初の実行時にロードするのに常に長い時間がかかります。遅いのが .NET アプリの最初の実行であるかどうか、または各.NET アプリの最初の実行が遅いかどうかはまだテストしていませんが、いずれにしても問題は残ります。この 1 回限りのスタートアップ ヒットをなくすにはどうすればよいでしょうか。

私の最初の考えは、ある種のサービスがライブラリを「ウォームアップ」できるということです。アプリごとにこれを行う必要がありますか?それとも .NET アプリだけですか? サービスを実行するユーザーによって違いはありますか? おそらく、Windows サービスではなく、Windows ログインで実行されるアプリケーションが汚い仕事をするのではないでしょうか? 繰り返しますが、それが .NET サービスであるという事実で十分でしょうか?それとも、ペナルティを排除するために各プログラムを実行する必要があるでしょうか? プログラムにすぐに終了するように指示するコマンド ライン パラメーターを渡すこともできますが、それで十分でしょうか?それとも、アプリケーションの通常の実行中に使用する各アセンブリを読み込むために .NET が必要でしょうか?


Re: いくつかの回答があります。リリース モードの DLL を展開していますが、速度が低下するのは最初の起動時のみです。クラスの初期化を可能な限り遅らせています。

4

4 に答える 4

10

.net アプリを初めて実行するときに待機できる JIT (ジャスト イン タイム コンパイル) です。これにより、コードを実行する前に、IL がマシン コードにコンパイルされます。これが最初にのみ発生する理由は、マシン コード バージョンがディスクに保存され、再利用されるためです。

NGEN.EXEアプリケーションを pre-jit するために使用できます...

これは、ソフトウェアを実行しているコンピューターで実行する必要があります。JIT は実行中の CPU 向けにコンパイルおよび最適化されるためです。プログラムのインストールの一部としてこれを行うことができます...

于 2009-06-26T17:44:01.057 に答える
4

他の回答ではJIT時間について説明していますが、私の経験では、もう1つの非常に重要な要素は、起動後に.NETFramework自体を初めてロードするのにかかる時間です。

絶対に些細なプログラムを書いてみてください(ただし、実際のコードが使用するアセンブリに少なくとも触れるプログラムが望ましいです)。コンパイルして再起動します。簡単なプログラムを実行してから(終了したら)実際のアプリケーションを実行します。簡単なアプリケーションを実行せずに再起動した後に実際のアプリケーションを実行する場合と比較してください。

于 2009-06-26T17:56:12.350 に答える