parallel.for と parallel.foreach を使用して、さまざまなページを並行してダウンロードするクローラーボットがあります。MaxDegreeOfParallelism は約 20 に設定されています。これを増やしてもパフォーマンスはさらに向上しないようで、Web サーバーに過負荷をかけたくないからです。
ASP.NET Web サイト (すべての場所) からクロールを開始すると、許容できるパフォーマンスで実行され、すべて数時間かかります。このセットアップの設計上の問題により、代わりにコンソールから起動できるようにこれを変更しています。
必要なコードはすべて、Web サイトとコンソール アプリの両方からアクセスできる dll にあります。
起動メッセージを除いて、コンソールへの出力はありません。
問題は、これをコンソール (またはデバッガー) から実行すると、ASP.NET Web サイトから実行する場合よりも約 10 倍長く (!) かかることです。ASP.NET のバージョンがコンソールよりも遅い場合は、理解しやすいと思います。
これはなぜですか、またはこれをデバッグしたり、その理由を見つけたり、問題を修正したりするにはどうすればよいですか?
編集: これは、Visual Studio デバッガーを使用して両方のバリアントを試すときにも発生します。「デバッグ」から「出力」ウィンドウへの出力は、次のようになります。
スレッド '' (0x1d34) はコード 0 (0x0) で終了しました。スレッド '' (0xf20) はコード 0 (0x0) で終了しました。スレッド '' (0x3414) はコード 0 (0x0) で終了しました。スレッド '' (0x35c8) はコード 0 (0x0) で終了しました。スレッド '' (0xdc) はコード 0 (0x0) で終了しました。スレッド '' (0x1c98) はコード 0 (0x0) で終了しました。スレッド '' (0x3308) はコード 0 (0x0) で終了しました。スレッド '' (0x2b00) はコード 0 (0x0) で終了しました。スレッド '' (0x2f7c) はコード 0 (0x0) で終了しました。スレッド '' (0x345c) はコード 0 (0x0) で終了しました。スレッド '' (0x2a18) はコード 0 (0x0) で終了しました。スレッド '' (0x138) はコード 0 (0x0) で終了しました。スレッド '' (0x3650) はコード 0 (0x0) で終了しました。スレッド '' (0x376c) はコード 0 (0x0) で終了しました。
ただし、ASP.NET の場合、このテキストは約 10 倍高速に書き込まれます。
ダウンロードされたページごとに dll が COM 経由で 7zip を呼び出して圧縮することにも言及する価値があるかもしれません。