asp.netアプリケーションにファイルダウンロード機能を実装しようとしています。このアプリケーションは、さまざまなファイルをダウンロードするために、たとえば約200人のユーザーが同時に使用します。IIS 7でホストされます。複数の要求が同時に発生するため、アプリケーションサーバーがクラッシュしないようにします。
ループでContext.Response.Flush()を呼び出すことにより、それまでに読み取ったであろうすべてのファイルデータをフラッシュしているので、アプリケーションのメモリ使用量が均一に保たれると想定しています。現在のコードに対して他にどのような最適化を行うことができますか、またはこのようなシナリオで他にどのようなアプローチを使用する必要がありますか?
要求はさまざまなファイルに対するものであり、ファイルサイズは100KBから10MBの間のどこでもかまいません。
私の現在のコードは次のようなものです:
FileStream inStr = null;
byte[] buffer = new byte[1024];
String fileName = @"C:\DwnldTest\test.doc";
long byteCount; inStr = File.OpenRead(fileName);
Response.AddHeader("content-disposition", "attachment;filename=test.doc");
while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0)
{
if (Context.Response.IsClientConnected)
{
Context.Response.ContentType = "application/msword";
//Context.Response.BufferOutput = true;
Context.Response.OutputStream.Write(buffer, 0, buffer.Length);
Context.Response.Flush();
}
}