私は、(HttpWebRequest を介して) S3 からファイルをストリーミングし、StreamContent を介してコントローラーからファイルを返す IIS がホストする WebApi サービスに取り組んできました。約 50 MB の大きなファイルの場合、CPU スパイクが高くなっています。ここにアクションのスニペットがあります。
public async Task<HttpResponseMessage> Get(Guid id)
{
var stream = await GetResponseStreamFromS3(id);
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = doc.FileName };
response.Content.Headers.ContentLength = streamAndLength.Length;
return response;
}
StreamContent を掘り下げると、Stream.CopyToAsync 呼び出し中にスパイクが発生するようです。スパイクが発生する理由とそれを軽減する方法についてのアイデアはありますか?