InternetReadFile的共同平均缓冲区大小是多少?

InternetReadFile的共同平均缓冲区大小是多少?

问题描述:

我在Delphi中使用WinInet.h来通过HTTP下载文件,平均大小在30 KB到1.5 MB之间。InternetReadFile的共同平均缓冲区大小是多少?

var 
    Buf: array[0..BUFFER_SIZE - 1] of Byte; 
while BOOL(InternetReadFile(hUrl, @Buf, SizeOf(Buf), BytesRead)) and (BytesRead > 0) do 
if Terminated then 
    Exit 
else 
begin 
    FStream.WriteBuffer(Buf, BytesRead); 
    Synchronize(UpdateProgress); 
    FillChar(Buf, SizeOf(Buf), 0); 
end; 

此类下载的推荐缓冲区大小是多少?如果不应该太大也不要太小。

对于这样的缓冲区,我usualy代码:

var 
    Buf: array[word] of byte; 

其中分配64 KB的缓冲区。

但是,从我的小实验中,WinINet太慢了,内部缓冲区大小不会变化太大。

如果你看看性能,看看WinHTTP的,比的WinINet快得多。速度提高10倍以上,至少对于多重连接而言。唯一缺少的功能是远程拨号接入的对话框:

的Microsoft Windows HTTP服务(WinHTTP)为开发人员提供一个 服务器支持的,高层次的接口 到HTTP/1.1互联网协议。 WinHTTP旨在主要在基于服务器的场景中使用 , 服务器应用程序将 与HTTP服务器进行通信。

是的WinINet设计为交互式 桌面应用程序的HTTP客户端平台,如 微软IE浏览器,微软 办公室,和Microsoft资金。 WinINet 显示用于某些 操作的用户界面,例如收集用户 凭据。但是,WinHTTP以编程方式处理这些操作。 需要HTTP 客户端服务的服务器应用程序应使用WinHTTP 而不是WinINet。有关更多 信息,请参阅移植WinINet WinHTTP的应用程序。

WinHTTP还设计用于系统服务和基于HTTP的客户端 应用程序。然而,需要FTP协议 功能,Cookie持久性, 缓存,自动证书对话框 处理,Internet Explorer的兼容性 ,或下层平台 支持单用户 应用程序应考虑使用 的WinINet。

MSDN

提取我实现了在我们的开源ORM框架两者的WinInet和WinHTTP客户端访问。你可以看看这篇博客文章,找出more info about WinHTTP

据我所知,最新版本的IE使用WinHTTP而不是WinINet。所以我们可能会考虑走向同一个方向。

没有显著差异,但我认为最值是65个536字节(包TCP限制),或30个字节000,因为你最小的文件更小的65 536

+1

同意,程序员倾向于从他们的帽子中取出2的权力。鉴于磁盘缓存的大小,我通常会选择128K或256K,但除非您使用本地http服务器和代码分析器进行实际测试,否则很可能无法区分它们。 –