我在 Delphi 中使用 WinInet.h 通过 HTTP 下载平均大小在 30 KB 到 1.5 MB 之间的文件。
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;
对于此类下载,建议的缓冲区大小是多少 - 如果不应该太大也不太小。
对于这样的缓冲区,我通常编码:
var
Buf: array[word] of byte;
其中分配 64 KB 的缓冲区。
但是,从我的小实验来看,WinINet速度太慢以至于内部缓冲区大小不会改变太多。
如果您寻找性能,请查看WinHTTP,这比WinINet。速度快了 10 倍以上,至少对于多个连接而言。唯一缺少的功能是用于远程拨号访问的对话框:
Microsoft Windows HTTP 服务 (WinHTTP) 为开发人员提供了
服务器支持的高级接口
HTTP/1.1 互联网协议。
WinHTTP 被设计用于
主要在基于服务器的场景中
进行通信的服务器应用程序
与 HTTP 服务器。
WinINet 被设计为用于交互的 HTTP 客户端平台
桌面应用程序,例如
微软 Internet Explorer、微软
Office 和 Microsoft Money。温网
显示一些用户界面
收集用户等操作
证书。然而,WinHTTP 可以处理
以编程方式进行这些操作。
需要 HTTP 的服务器应用程序
客户端服务应使用 WinHTTP
而不是 WinINet。了解更多
信息,请参阅移植 WinINet
WinHTTP 的应用程序。
WinHTTP 还设计用于系统服务和基于 HTTP 的客户端
应用程序。然而,单用户
需要FTP协议的应用程序
功能、cookie 持久性、
缓存、自动凭证对话框
处理, Internet Explorer
兼容性或下层平台
支持应考虑使用
WinINet。
摘自MSDN http://msdn.microsoft.com/en-us/library/aa384273%28v=vs.85%29.aspx
我在我们的开源 ORM 框架中实现了 WinInet 和 WinHTTP 客户端访问。您可以看看这篇博客文章来了解一下更多信息关于WinHTTP http://blog.synopse.info/post/2011/07/04/WinINet-vs-WinHTTP.
据我所知,最新版本的IE使用WinHTTP代替WinINet。所以我们可以考虑朝同一个方向走。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)