2

我一直在研究一个 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 调用期间发生了峰值。关于它为什么会导致尖峰以及如何减轻它的任何想法?

4

0 回答 0