ASP.Net のカスタム ハンドラーを使用してクライアントにファイルを書き戻したいのですが、処理時間を最小限に抑える最善の方法は何かを考えています。現時点では、同じことを行う 2 つの異なるバージョンのコードがありますが、ハンドラーが頻繁に使用されるため、どの方法が最も効率的かを考えています。
完全なファイルをバイト配列にロードし、BinaryWrite
ファイルの書き込みに使用します。
string filePath = context.Server.MapPath(context.Request.Url.LocalPath);
Byte[] swfFile = File.ReadAllBytes(filePath);
context.Response.AppendHeader("content-length", Utils.MakeString(swfFile.Length));
context.Response.ContentType = Utils.GetMimeType(Path.GetExtension(filePath));
context.Response.BinaryWrite(swfFile);
FileInfo
オブジェクトを使用してファイルの長さを決定し、ファイルTransmitFile
を書き込む:
string filePath = context.Server.MapPath(context.Request.Url.LocalPath);
FileInfo fileInfo = new FileInfo(filePath);
context.Response.AppendHeader("content-length", Utils.MakeString(fileInfo.Length));
context.Response.ContentType = Utils.GetMimeType(Path.GetExtension(filePath));
context.Response.TransmitFile(filePath);
TransmitFile
ファイルをバッファリングせずに書き込むため、この方法が最も効率的であると思います。FileInfo
オブジェクトはどうですか?ファイルサイズはどのように計算されますか? そして、FileInfo
オブジェクトはこれを行うための最良の方法ですか、それともより良い方法がありますか?