6

アプリケーションの起動時間をプロファイリングしようとしているので、Process.Start() メソッドを使用してアプリケーションを起動し、ストップウォッチを使用して時間を計測する小さな C# プログラムを作成しました。

アプリケーションを自分で (クリックするだけで) 起動しようとすると、おそらく 2 ~ 3 秒かかります。テスト プログラムを使用してアプリケーションを起動しようとすると、8 ~ 10 秒かかります。起動時間は一貫してその大きさで異なります。

Process.Start を使用して実行可能ファイルを開始すると、起動時間に大きな影響を与える理由はありますか?

4

3 に答える 3

1

ご協力ありがとうございます。答えはありますが、Process.Startとは関係ありません。

プロセスを開始した後、アプリが実際に表示されたことを認識するために特定のウィンドウハンドルが表示されるのを待っていました。ループがきつすぎました。whileループで200ミリ秒のスリープを導入しましたが、起動時間は再び正常でした。

于 2010-08-28T07:17:40.730 に答える
0

手がかりはProcess.Start()System.Diagnostics名前空間にあるはずです。この方法でプロセスを開始すると、多数のモニター/インスペクターがプロセスにアタッチされます。これは間違いなくオーバーヘッドを追加します。

オブジェクトを開始した直後に(不必要に長時間のプロセス監視を回避するために)オブジェクトを呼び出してみるDispose()ことProcessもできますが、関連するオーバーヘッドを完全に回避することはできません。

于 2010-08-27T01:54:02.977 に答える
0

簡単に言えば、実際には 1 つだけでなく 2 つのプロセスを開始しています。そのため、時間がかかります。

アプリをダブルクリックすると、アプリケーションが 1 つだけ読み込まれ、そのすべてが DLL になります。

診断アプリを実行するときは、最初に、JIT を実行する必要がある .NET アセンブリを含む最初のアプリケーションを読み込みます (ジャスト イン タイム コンパイル: これは無料ではありません)。それがすべて完了して初めて、OTHERアプリケーションが開始されます。ターゲット アプリが .NET アプリでもある場合は、サイクル全体が繰り返されます。

于 2010-08-27T02:13:21.113 に答える