C# 二进制文件下载速度很慢

C# 二进制文件下载速度很慢,c#,performance,asp.net-web-api,C#,Performance,Asp.net Web Api,我有一个文件,我正试图使用HttpResponseMessage返回到web客户端。代码可以工作,但传输速度比从IIS虚拟目录中获取同一文件慢五到十倍。我通过监控我的下载带宽消耗来验证这不是一个编码问题,带宽消耗从不超过每秒250千字节,而从IIS直接下载的带宽通常是这一速度的五倍 以下是代码,为了清晰起见,代码被剥离到其基本要素,并删除了错误陷阱: // Succeeded in getting the stream opened, so return with HTTP 200 status

我有一个文件,我正试图使用HttpResponseMessage返回到web客户端。代码可以工作,但传输速度比从IIS虚拟目录中获取同一文件慢五到十倍。我通过监控我的下载带宽消耗来验证这不是一个编码问题,带宽消耗从不超过每秒250千字节,而从IIS直接下载的带宽通常是这一速度的五倍

以下是代码,为了清晰起见,代码被剥离到其基本要素,并删除了错误陷阱:

// Succeeded in getting the stream opened, so return with HTTP 200 status to the client.
var stream = new FileStream(uncPath, FileMode.Open,FileAccess.Read, FileShare.Read);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeExtensionHelper.GetMimeType(uncPath)); 
return result;

我遗漏了什么吗?

MimeExtensionHelper.GetMimeType(uncPath)返回什么?您是否尝试过硬编码一个值
result.Content.Headers.ContentType=new MediaTypeHeaderValue(“应用程序/八位字节流”)?我想说,您的反病毒程序正在扫描二进制文件。禁用它并报告。谢谢。它提供了正确的MIME类型——在本例中,它的大部分功能都是image/jpeg。我刚刚通过实验发现,如果我将整个文件读入字节数组,并使用ByteArrayContent而不是StreamContent,文件传输时间从13秒减少到3秒以下(对于2.5MB的文件,从托管服务器传输到桌面)。因此,它与流的读取缓冲有关。奇怪的是,在打开文件时给流一个大的缓冲区并没有帮助。这就好像HttpResponse一次读取和写入一个字节。不管防病毒软件如何,不管文件是在本地驱动器还是网络驱动器(相对于web服务器)上,也不管调用FileStream构造函数时分配的缓冲区大小如何,都会出现这种慢度。奇怪的是,默认情况下,这应该是如此缓慢。你有没有想过这一点?我在这里发布了一个类似的问题: