2009-08-20 20 views
2

Webサービスからファイルを取得するためにResponse.TransmitFileを使用しています。私は、このプロセスがサーバーの観点から取る時間を測定したいと思います。Response.TransmitFileの完了時にコードを実行する

私はこの呼び出しの前と後にティックカウントを取得しようとしましたが、転送に要した時間は明らかではありませんでした。それは30MBのファイルに対して0.0016ミリ秒のようなバックナンバーを返しました。 :-)

アイデア?

答えて

2

あなたが見たように、転送は非同期です。

TransmitFileを呼び出す前に、HttpResponse(Response.Buffer = false)でバッファリングをオフにすることで、希望を得ることができます。それが失敗するならば、transmit it "manually" and synchronously, using FileStream

送信に必要な時間だけを知りたい場合は、あなたの情報だけで、アプリケーションに時間を記録する必要はありませんが、Fiddlerで行うことができます。

+2

AFAIK、TransmitFileは、IIS/Kernelへの転送を非常に高性能なものにするので、それを離れていくと、サーバー側で大きなパフォーマンス上のペナルティが発生します。 Fiddlerはクライアント側からの良い提案です。 IISロギングやその他の機能を有効にして、TransmitFile APIをベンチマークする方法があります。 – EricLaw

+0

response.buffering属性がTransmitFile呼び出しに影響しますか? MSDNによると、[[TransmitFile]は指定されたファイルをメモリにバッファリングせずにHTTP応答出力ストリームに直接書き込みます。 – JohnFx

関連する問題