我一直在研究一个 IIS 托管的 WebApi 服务,该服务从 S3(通过 HttpWebRequest)流式传输文件并通过 StreamContent 从控制器返回它。对于较大的文件,大约 50mb,我们看到 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 调用期间发生了峰值。关于它为什么会导致尖峰以及如何减轻它的任何想法?