1

ユーザーが使用できるようになる前に、すべてのプラグインをロードするのに時間がかかるGUIアプリケーションがあります。

このアプリケーションの起動にかかる時間を測定するC#プログラムを作成したいと思います。Process.WaitForInputIdle()メソッドでうまくいくと思いましたが、そうではありません。プロセスが開始されるとすぐに終了します。

私が今持っているのはこれです:

DateTime startTime = DateTime.Now;

Process myAppUnderTest = Process.Start("C:\\Program Files\\My App\app_under_test.ext");

myAppUnderTest.WaitForInputIdle();   //Wait until the application is idle.

DateTime endTime = DateTime.Now;

int elapsedTimeInSecs = endTime.Subtract(startTime).Seconds;

Console.WriteLine("Start up time (sec): {0}", elapsedTimeInSecs);

意図した起動時間を取得するにはどうすればよいですか?

4

2 に答える 2

2

とても難しいと言っています。

ロード済みで準備完了のアプリケーションをどのように分類しますか? 方法があれば(私はそうは思いませんが)、それは簡単です。

ただし、読み込んでいるアプリが特定の方法 (IPC/ファイル/ネットワーク) で通知する場合は、その信号をキャプチャして、アプリが読み込まれたと言うことができます。その場合、タイマー/ストップウォッチ/パフォーマンス カウンターを使用できます。

時間を計るアプリを変更できれば、さまざまな方法で実現できます。それがあなたの外部にある場合、簡単な方法はないと思います。

于 2010-10-07T09:06:31.937 に答える
0

Process.WaitForInputIdle() はメイン ウィンドウに応答します。そのプロセスが開始されると、次に進みます。アプリが準備完了状態にあることを示すメッセージがメイン ウィンドウに表示されていますか? その場合は、存在するループユニットまたは非常に時間が経過したループユニットにアプリを入れてみてください。すでに述べたように、タイミングについては Stopwatch クラスも参照することをお勧めします。

あなたがこれをしているときに、他のいくつかの考えがあります。このプロセスだけが実行されていることを確認してください。そうしないと、競合が発生することがあります。アプリが完全にロードされたときにトリガーが何であるかを理解するために、いじる必要があるかもしれません。

于 2011-03-04T06:57:15.133 に答える