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