C# 通过asp.net提供图像的最快方式

C# 通过asp.net提供图像的最快方式,c#,asp.net,file,filesystems,C#,Asp.net,File,Filesystems,我想知道通过ASP.net交付图像的最快方式是什么: //get file path string filepath = GetFilePath(); Response.TransmitFile(f); 或: 或 或者您可以想到的任何其他方法测试起来都很简单,我建议您设置三个不同的URL来测试不同的机制,然后让客户端(HttpWebRequest/HttpWebResponse或WebClient实例)从所有这些URL下载内容。使用秒表实例为下载计时 我想这并不重要,网络延迟在大多数情况下都会

我想知道通过ASP.net交付图像的最快方式是什么:

//get file path
string filepath = GetFilePath();
Response.TransmitFile(f);
或:


或者您可以想到的任何其他方法测试起来都很简单,我建议您设置三个不同的URL来测试不同的机制,然后让客户端(HttpWebRequest/HttpWebResponse或WebClient实例)从所有这些URL下载内容。使用秒表实例为下载计时


我想这并不重要,网络延迟在大多数情况下都会超过IO延迟(除非你一直在重击硬盘驱动器)。

这并不能真正回答你的问题,但asp不是一个文件服务器,如果你想提供文件服务,请使用IIS并让asp链接到这些文件,或者,如果必须使用ASP,请使用它重定向到适当的位置

我不是说不能这样做,但是如果你担心表现,你可以考虑走另一条路。 在你使用的方法中,我认为位图是最慢的,因为它创建了一个更复杂的对象


如果你必须通过asp来完成,似乎有一个不错的解决方案。

有一件事是肯定的——这不会像让IIS服务器处理文件那样快。如果通过asp.net路由请求,而不是让IIS提供服务,则会引入大量不需要的开销


我能想象通过asp.net进行路由的唯一原因是出于安全目的;是这样吗?

根据我的经验,请使用TransmitFile(),只要这是您要发送的唯一内容,而且听起来像是这样

注意,这与支持AJAX的ASPX文件不兼容。

您需要使用大型图像文件进行测试,以查看明显的差异,但TransmitFile将输出Perform WriteFile

在这两种情况下,您都应该使用ashx处理程序而不是aspx页面来提供图像。aspx具有不需要的额外开销

还有一件事——在发送文件时设置ContentType,否则浏览器可能会将其呈现为二进制乱码。 对于BMP:


context.Response.ContentType=“image/bmp”

我想您这样做可能是出于安全考虑,也可能是为了记录某种类型的指标(例如,记录每次对数据库的点击,以了解哪个图像最受欢迎,或者谁在查看图像等),或者是为了URL重写。如果没有特别的理由使用ASP.NET来提供映像,那么您应该像其他人所说的那样让IIS来处理它

此外-这并不能回答您的问题,即从磁盘读取图像文件时,哪种方法最有效,但我想我应该指出这一点:


如果已经有包含图像的流或位图,请使用该流或位图直接写入
Response.OutputStream
。如果您已经有了数据流,您肯定希望避免将其写入磁盘,然后再从磁盘读取。

测试它并让我们知道!它必须通过asp.net吗?
string filepath = GetFilePath();
context.Response.WriteFile(f);
Bitmap bmp = GetBitmap()
bmp.Save(Response.OutputStream);