4

現在、外部アプリケーションが実際に dll の 1 つ (アップデータ コード) を消費しているかどうかをテストするために、次のコードを実行しています。

 ProcessStartInfo psi = new ProcessStartInfo()
 {
      FileName = "Tasklist.exe",
      Arguments = @"/m MyServices.dll",
      CreateNoWindow = true,
      RedirectStandardOutput = true,
      UseShellExecute = false
 };
 Process p = new Process();
 p.StartInfo = psi;
 p.Start();
 //debug output box, just to see everything that returns
 txtOutput.Text = p.StandardOutput.ReadToEnd();
 p.WaitForExit();
 Refresh();

 if (txtOutput.Text.Contains("TestProgram.exe"))
      MessageBox.Show("Found It");

さて、このコードは動作します!!! ....しかし、その STUPID は遅いです。同じコマンドを cmd ウィンドウに入力して、10 分の 1 秒で応答を得ることができますが、何らかの理由で、その行の一時停止にp.StandardOutput.ReadToEnd()1 ~ 5 分かかります!!

そして今、実際の質問:

なぜそんなに遅いのか誰か知っていますか?または、それを修正して許容できる速度にする方法はありますか?

更新: 追加データ

シェル ウィンドウを使用していて、実際に出力をキャプチャしない場合、シェル ウィンドウでタスクの実行を監視できます。わずかに (わずかに) 高速に実行されますが、出力がシェル ウィンドウに表示されるまでに 1 分かかります。それが何をしているのか分かりません。

4

2 に答える 2

1

このスレッドが非常に古いことは知っていますが、同じ問題に遭遇したばかりで、修正を見つけました。x64 コンピューターで x64 タスクリストを使用してください。あなたがここにいるように(SysWow64で)x86 .exeを使用すると、実行時間が非常に長くなります-ハングせず、処理が非常に遅くなります。このファイルを使用する必要があります。

C:\Windows\sysnative\tasklist.exe
于 2016-08-04T17:05:42.827 に答える