大規模なデータストリーム標準出力の問題大規模なデータストリーミング標準の出力がwaitforexitによってぶら下がっているときにリダイレクトされたときの問題
プロセスを実行すると、バッファーによる制限に関連する問題が発生する可能性があります。具体的には、控除の場合、出力サイズが特定のしきい値(7MBなど)を超える場合、プログラムは
期間中に無期限に掛けられる場合があります。
ProcessStartInfo
理由StandardOutput
StandardOutput
WaitForExit
依存者と内部バッファーがいっぱいになると、この動作が発生します。コールプロセスが読み取り前にターゲットプロセスを待機している場合、目標プロセスが完全なバッファー領域を書き込もうとすると、ターゲットプロセスがブロックされます。代わりに、コールプロセスが
ストリームがブロックされている場合)、ブロックされる場合があります。 solution
StandardOutput
この問題を解決するには、非同期読み取りを使用して、バッファーが容量を達成するのを防ぎます。次のコードの例は、この操作の実行方法を示しています:StandardOutput
ReadToEnd
このソリューションは、非同期コールバックを使用して、StandardOutput
およびStandardError
から受信したデータを処理して、内部バッファゾーンがいっぱいにならず、死んだロックを防ぎます。
注:時点で発生したときにを回避するには、アクセスプロセスの出力またはエラーフローの前にプロセスの
プロパティを確認してください。以上が大きなデータストリームを使用して標準出力をリダイレクトするときに、なぜwaitforexitが失速するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。