1

ユーザーレベルに基づく速度制限機能を備えたファイル転送ハンドラーをプログラミングしています。HttpHandler で転送レートを制御/計算するにはどうすればよいですか?

一部のasp.netリソースは、Thread.Sleepを使用するとasp.netスレッドプールがブロックされることを教えてくれます。

4

2 に答える 2

2

ASP .NETのスレッドをスリープ状態にすることは、一般的にはお勧めできません。これらのスレッドは、プールからの要求を処理するために使用される可能性があるためです。たとえば、プールに10個のスレッドがあり、ダウンロードを処理していた10個のスレッドをスリープ状態にすると、ダウンロードが完了するまで、他のすべての要求がキューに蓄積されます。

次のように、IHttpHandlerではなくIHttpAsyncHandlerを作成することをお勧めします。

http://msdn.microsoft.com/en-us/library/ms227433.aspx

タイマーを使用して、xバイトのデータを定期的にクライアントに送信できます(ただし、IsClientConnectedなどを使用して閉じた接続を定期的にプールするようにしてください)。

于 2008-12-14T12:00:37.723 に答える
0

これを行うには、タイマーとタイマー コールバックを使用してみてください。アイデアは、ハンドラーを実行できるタイミングとその長さをトリガーするタイマー (または 2 つ) を用意することです。「go」タイマーが期限切れになるたびに、「stop」タイマーが期限切れになるまで(または同じタイマーが再び期限切れになるまで)応答にデータを書き込むスレッドを開始し、そのスレッドはそれが行っていたことを終了し、ハウスキーピングを行います次のスレッド、「go」タイマーをリセットして終了します。メインスレッドは、転送用のデータである初期タイマーを設定し、タイマーを呼び出して終了します。おそらく、再びアクセスできるように、応答へのハンドルをどこかに保持する必要があります。ハンドラーが待機/実行する時間を変えることで、使用するリソースの数を制御できます。

于 2008-12-06T04:04:55.953 に答える