2010-08-01 141 views
3

我想知道是否有性能(或其他重要的因素),通过这种方法从我们的服务器发送到浏览器中的文件之间的差异:发送二进制数据流客户端浏览器

For i = 1 To fileSize \ chunk 
    If Not Response.IsClientConnected Then Exit For 
    Response.BinaryWrite stream.Read(chunk) 
    Response.Flush 
Next 

VS

IIS自带的旧纯文件访问方法。

出于安全原因,我们正在研究文件管理器处理程序,并希望知道性能影响是什么。

+0

您发送的内容类型是什么,典型的大小范围是多少,您可能期望的并发下载次数,频率如何。 – AnthonyWJones 2010-08-03 09:21:50

回答

2

除非你正在处理一个相当大的文件,不应该有一个明显的区别。由于您正在手动创建块并刷新缓冲区,因此您将拥有更多的数据包流量到客户端(数据包的有效负载或最后一个数据包将只部分满)。但是,正如我所说的,除非你有一个大文件,否则这个文件可能不会被注意到,即使它不可能出现。

+0

我上次测试这个'Flush'会阻塞,直到收到刷新的数据包的所有ACK。所涉及的延迟会导致更长的下载时间,您可能会想到。它有可能IIS7可能已经改变了这种行为。使用较大的缓冲区大小(如64K)可以最大限度地减少此延迟的影响和发送的额外数据包的数量。 – AnthonyWJones 2010-08-02 12:21:11

+0

我很努力不以“这取决于”的答案:) 有在IIS 5 + 6之间做出了一些改变,但也有一些额外的因素:你计算性能作为运行服务器端脚本的性能,从请求到交付的总时间,服务器上的资源负载?虽然会发生阻塞,但数量取决于您正在刷新的数据量(正如您在下面指出的那样),整个事情将取决于文件的大小(在这一点上,您必须平衡服务器上的内存使用情况并防止出现阻塞/ network latency/under-sizing packets)等。 – Tarwn 2010-08-02 14:01:29

+0

谢谢,我们将运行一些测试,看看网络过载如何分割块。 – AMember 2010-08-03 08:01:59

2

这两种方法都需要将二进制数据推送到浏览器。

想知道什么是对性能的影响。

像往常一样在这样的情况:指标。尝试优化IIS上的设置并再次测量,直到获得最佳解决方案。

+0

在这种情况下,IIS中的哪些设置可以进行优化以获得最佳性能? – AnthonyWJones 2010-08-02 12:22:23

0

根据我的经验,使用脚本来分块的东西明显比IIS高度优化的静态文件处理慢。当其他糟糕的选择已经完成时(比如使用4096个字节作为缓冲区大小),速度慢多少取决于我见过的多达10倍的因素。

有些东西可能已经IIS7改善,但如果你能获取文件为静态内容,我肯定会与该走了。