2

Windows Server 2008 64ビットでは、ASP.NETアプリケーション(ASP.NETスレッドプール、同期要求処理を使用)が長時間実行されている場合(> 30分)、IIS7.0および.NET4.0。Webアプリケーションにはページがなく、主な目的は、巨大なファイル(> 1 GB)をチャンク(〜5 MB)で読み取り、それらをクライアントに転送することです。コード:

while (reading)
{
    Response.OutputStream.Write(buffer, 0, buffer.Length);
    Response.Flush();
}

単一のプロデューサー-単一のコンシューマーパターンが実装されているため、リクエストごとに2つのスレッドがあります。ここではタスクライブラリを使用していませんが、このシナリオで従来のスレッド作成よりも優れているかどうかをお知らせください。(.aspx)ページの代わりにHTTPハンドラー(.ashx)が使用されます。ストレステストでは、CPU使用率は問題ではありませんが、単一のワーカープロセスでは、210の同時クライアントの後、新しい接続でタイムアウトが発生します。私はセッション状態を使用しないので、これはWebガーデニングによって解決されます。私が見逃した大きな問題があるかどうかはわかりませんが、あなたの意見で他にどのような考慮事項をとるべきか教えてください。

たとえば、通常のASP.NETページは5分未満で処理されるため、IISは「接続タイムアウト」のために長時間実行されているTCP接続を閉じる可能性があるため、値を増やす必要があります。

私はあなたのアイデアに感謝します。

4

5 に答える 5

2

個人的には、このタイプの処理の別のメカニズムを検討しています。HTTPリクエスト/Webアプリケーションはこのタイプのもの用に設計されておらず、安定性は非常に困難になります。このタイプのモデルで作業していると、大きな問題を引き起こす可能性のある多くのリスクがあります。

その処理をバックエンドプロセスに移して、asp.netランタイムの外部にいるようにします。そうすれば、開始/シャットダウンなどをより細かく制御できます。

于 2010-10-22T18:30:54.483 に答える
2

まず、決して。一度もない。一度もない!スレッドプールスレッドで数秒以上かかる処理を実行します。それらの数は限られており、システムによって多くの目的で使用されています。これはトラブルを求めています。

次に、ハンドラーは良い考えですが、「オンザフライで生成」の意味が少し曖昧です。ファイルをオンザフライで暗号化していて、この暗号化に30分かかる可能性があるということですか。それとも、データベースからデータを取得してファイルを組み立てているということですか?または、ダウンロードに30分かかるということですか?

編集:

私が言ったように、長時間実行するものにはスレッドプールを使用しないでください。独自のスレッドを作成するか、.NET 4を使用している場合は、タスクを使用して、実行時間として指定します。

于 2010-10-23T18:14:05.940 に答える
1

長時間実行されるプロセスは、この方法で実装しないでください。これを、設定したサービスに渡します。

クライアントのページをハングさせたい場合は、AJAXからIOスレッドでブロックされないもの(node.jsなど)へのインターフェースを検討してください。

多くのクライアントへのプッシュ通知は、スレッドの使用のためにASP.NETが処理できるものではないため、私のnode.jsです。負荷が低い場合は、他のオプションがあります。

于 2010-10-22T18:31:54.200 に答える
0

長時間実行されるプロセスを処理するWeb1.0の方法は、サーバー上でそれらを生成し、すぐに戻ることです。生成されたサービスに進行状況をデータベースに更新させ、サイトのページで進行状況を照会できます。

この手法の最も一般的な使用法は、小包の配達を受けることです。パッケージが表示されるまでHTTP接続を開いたままにすることはできないため、進行状況を照会する方法が提供されます。バックグラウンドプロセスでは、アイテムの取得、梱包、UPSトラックへの配送などに必要なすべてのステップを調整します。途中で、各ステップがデータベースに記録されます。概念的には同じです。

質問編集に基づいて編集:結果ページをすぐに返し、生成されたスレッドまたはプロセスでサーバー上にバイナリを生成します。Ajaxを使用して、ファイルの準備ができているかどうかを確認し、準備ができたら、ファイルへのリンクを提供します。

于 2010-10-22T18:50:08.977 に答える
0

アプリケーションの安定性を高めるには、Webガーデニングを使用してください。

aspxページがないため、キャッシュをオフにします

パフォーマンス分析なしでこれ以上アドバイスするのは難しいです。VSが組み込まれていて、ボトルネックを見つけます。

于 2010-11-01T17:53:24.423 に答える