4

System.Diagnostics.Process を使用して別の exe を実行する C# アプリがあります。プロセスが try ブロックで開始され、finally ブロックで閉じられるサンプル コードに遭遇しました。プロセスが閉じられていないサンプルコードも見ました。

プロセスが閉じられていない場合はどうなりますか?

プロセスを作成したコンソール アプリが閉じられると、プロセスによって使用されるリソースは再利用されますか?

長時間開いているコンソール アプリで、多くのプロセスを開き、それらのいずれも閉じないのは悪いことですか?

乾杯!

4

3 に答える 3

13

他のプロセスが終了すると、そのすべてのリソースが解放されますがClose()、参照を呼び出さない限り、プロセス ハンドル (プロセスに関する情報のブロックへのポインター) を保持したままになりますProcess。多くの問題があるとは思えませんが、あなたもそうかもしれませんProcessを実装して、C# のステートメントをIDisposable使用できるようにします。using(...)DisposeClose()

using (Process p = Process.Start(...))
{
  ...
}

経験則として: 何かが を実装している場合IDisposableは、実際に/または使用する必要があります。DisposeCloseusing(...)

于 2008-10-08T23:25:44.057 に答える
1

プロセスはスタンドアロンのエンティティです。プログラムでプロセスを作成することは、デスクトップからプロセスを起動することとほとんど同じです。

作成したプロセスへのハンドルは、便宜上のみ返されます。たとえば、入力ストリームと出力ストリームにアクセスするため、または (ご覧のとおり) 強制終了するためです。

親プロセスが強制終了された場合、リソースは再利用されません。

多くのプロセスを開くのが悪い唯一の場合は、CPU と RAM が処理できないほど多くのプロセスを開く場合です!

于 2008-10-08T23:23:08.290 に答える
1

自分で開始したかのように、それらは引き続き実行されます。

于 2008-10-08T23:19:07.923 に答える