InternetReadFile 的常见平均缓冲区大小是多少?

2023-12-22

我在 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(使用前将#替换为@)

InternetReadFile 的常见平均缓冲区大小是多少? 的相关文章

  • 如何在 PowerShell 中从网络下载整个文件夹的文件/子文件夹

    我可以使用以下命令从网络下载单个文件 wc New Object System Net WebClient wc DownloadFile http blah root somefile ext C Downloads www blah r
  • 如何读取和更改 TEdit 控件的值?

    我有一个表格TForm1有 5TEdit and 2 TBitBtn 我还需要该程序 以便在输入数字数据后Edit1 and Edit2 on BitBtn1Click Edit1 and Edit2值将被求和并显示在Edit3 你想做这样
  • 在 mac 上使用 AVFoundation 和 AVCaptureVideoDataOutput 时如何使用自定义视频分辨率

    我需要处理捕获的视频帧的每一帧 尽管AVCaptureDevice formats提供了这么多不同尺寸的框架尺寸 看起来AVCaptureSession仅支持预设中定义的帧大小 我也尝试过设置AVCaptureDevice activeFo
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • Delphi 7 - 处理表单中嵌入框架的 MouseWheel 事件?

    你好 我有一个表格 里面有几个框架 对于某些框架 我希望滚动内容 或至少处理鼠标滚轮事件 我已经尝试过以下方法 只需为每个帧分配一个 OnMouseWheel 事件处理程序 重写父窗体的 MouseWheel 事件 procedure TF
  • 为什么 char name[1] 可以容纳超过 1 个字符? [复制]

    这个问题在这里已经有答案了 当我遇到这种情况时 我正在对一个主题进行一些研究 假设有以下 C 代码 include
  • TFrame继承重构

    我提出的另一个 TFrame IDE 注册组件问题 感谢各位程序员的帮助 尝试 Darrian 的 TFrame 继承建议here https stackoverflow com questions 382562 delphi visual
  • 如何使用maven生成下载站点

    我是 Maven 新手 正在尝试完成一个简单的任务 构建jar包和网站 完成 通过 scp 将它们部署到远程服务器 完成 该站点应包含下载页面 其中包含指向已部署的 jar 文件的链接 缺失 我不想使用 archive 或类似的工具 我只想
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • (发件人:TObject)

    发件人 TObject 是什么意思 如 procedure TForm1 Button1Click Sender TObject var s Integer begin end Sender 是对触发事件的组件的引用 在这种情况下 Send
  • 单击锚点,在同一窗口中下载文档

    我想提示用户在同一窗口中保存数据 可以是任何类似 图像 pdf excel 工作表等 我不想用HTML5下载选项 因为这并非对所有浏览器都有效 例如 我想提示用户下载谷歌徽标 如下代码所示 a href https www google c
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • 使用 Java 通过 HTTP 下载未知长度的文件

    我想用java下载一个HTTP查询 但是我下载的文件在下载时有一个未确定的长度 我认为这将是相当标准的 所以我搜索并找到了它的代码片段 http snipplr com view 33805 http snipplr com view 33
  • Solaris 10 有 wget 命令吗

    Solaris 11 有 wget 命令 就像 Linux 一样 Solaris 10 是否有 wget 或类似 wget 的命令 Solaris 10 中的 wget 命令在某种程度上是隐藏的 你可以在这里找到它 usr sfw bin
  • Flutter - 使用 Android 下载指示器下载文件

    我正在尝试下载邮件系统的附件 为此 我正在使用颤振下载器 https pub dartlang org packages flutter downloader但我需要通过我的 http 客户端传递我的令牌 我认为这个插件没有处理这个问题 我
  • 新编译的应用程序需要 UAC/elevation?

    我有一个系统 我将其设置为普通的 UAC 并在我的 delphi 环境中编译名为 ka exe 的项目 并为其创建一个 installshield 项目 设置完毕 一切顺利 但每当我开始我的程序时 它都需要提升 而我不知道为什么 为了确保
  • 如何将IDL导入到Delphi中?

    我如何导入接口定义语言 idl 文件存入Delphi 将类型和接口转换为 pascal 文件 我试过了 File Open 它只显示 idl 文本文件的文本 Project 添加到项目 它只是 就像 添加了一个 idl文本文件到项目 成分
  • Firebird 或 NexusDB

    我知道有很多与 Delphi 数据库相关的问题 但我只考虑这两个数据库 我需要查询大约 100 000 条记录 根据您的经验 哪个更快 作为嵌入式 as C S Thanks 我还没用过 Nexus tbh 但我经常使用 Firebird
  • 如何将 Delphi Chromium Embedded (TChromium) 组件的声音静音?

    我需要将某个声音静音TChromium组件来制作无声浏览器 主要问题是在 Windows XP 上 当我将浏览器的声音静音时 它会静音整个系统的声音 有没有办法让电脑静音TChromium成分 我已经成功使用以下代码 procedure C

随机推荐

  • 在Java中以一定的时间间隔添加大量数据

    我想使用 jdbc 以一定的时间间隔向数据库表中添加记录 例如 我想以 10 秒的间隔添加 100000 条记录 因此它将插入 10000 条 秒 我的MySQL代码如下 String url1 jdbc mysql localhost 3
  • 我如何为特定列中的每个值添加总计行,该行基于其他列进行计算,

    假设我有这个数据框 我想要的是这个 我想要做的是创建根据月份变量进行分组的行 然后获取总变量的总和 以及该月所有值的 days month 变量的唯一值 我只是想知道是否有一种简单的方法可以做到这一点 不涉及多次传播并收集装饰总计 我必须在
  • C# 2D 游戏编程教程

    我想学习用 C 编写 2D 游戏 有哪些面向初学者 针对 C 编写 最好使用 GDI 或同样简单的东西 的最佳教程 我依靠这个社区的经验来引导我走向最好的方向 Books 开始 NET 游戏编程 https rads stackoverfl
  • Python Svgwrite 和字体样式/大小

    我正在尝试制作一个连接到网络抓取工具的 SVG 文件 如何使用 svgwrite 更改字体和文本大小 我知道我必须定义 CSS 样式并以某种方式将其连接到文本对象 但这是如何制作的呢 这是我到目前为止的代码 import svgwrite
  • 存储部分和的二叉树:名称和现有实现

    Consider a sequence of n positive real numbers ai and its partial sum sequence si Given a number x 0 sn we have to find
  • 使用脱字符号 (^) 拆分长命令不适用于批处理文件中的管道 (|)

    答案关于这个问题 https stackoverflow com q 69068 3705191声明可以通过使用插入符将长命令分成多行 一个答案提供了技术描述 插入符号 and 换行符其后的被删除完全来自命令 然而 这似乎并不总是有效pip
  • 如何处理 C 中的 free() 错误?

    假设我已经使用了free 函数来释放内存 由于多种原因 我不允许这样做 如何阻止我的 C 应用程序崩溃并生成错误并继续执行 我这里没有 try catch 类型的规定 例如 C java 有什么办法可以忽略这个错误并继续执行吗 If yes
  • React Native 中的 OCR 库。可以使用 tesseract.js 吗?

    我应该使用什么免费库来在 React Native 中进行扫描 我需要一个库来扫描文档 我想在相机上设置帧大小并从照片加载数据 我找到了一个库 但它不会再维护了 https github com jonathanpalma react na
  • git:如何重新同步 fork?

    我们需要遵循的工作流程是这样的 将 github 上的项目分叉到您自己的私人 githib 帐户中 将分叉项目克隆到本地计算机 在本地计算机上创建 主控的 功能分支 将分支提交到分叉存储库 在主存储库上向分叉存储库上的新分支发出拉取请求 这
  • C# 与 Java HmacSHA1,然后是 base64 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个 java 代码示例 用于使
  • 脚本上的 BigQuery 请求超时错误

    在 BigQuery 上运行查询作业时出现错误 消息 gt 请求超时 请再试一次 原因 gt 超时 位置 gt 脚本 我们将按照要求再次运行它 但由于它需要 1 2 小时才会超时 因此如果我们知道问题是什么 这样我们就可以避免它 这将很有帮
  • 字段列表中的未知列。 PHP+MySQL

    我试图将值添加到 phpmyadmin 中的表中 但收到错误 字段列表 中的未知列 这是我的代码
  • 使用 intel pin 工具的堆栈分配大小

    我有以下 c 代码 include
  • AttributeError:“unicode”对象没有属性“_sa_instance_state”

    我刚刚学习如何使用 SQLAlchemy 我正在尝试执行以下操作 但将标题和链接存储在两个单独的表中 temp Submissions title u Facebook Homepage link u http facebook com s
  • 如何(重新)调用已初始化对象的构造函数?

    我正在编写一些代码来检查特定的 MIDI 设备是否已插入 如果没有 则代码每 5 秒重新检查一次 直到插入为止 我的问题出现在检查设备列表时 外部库没有重新检查端口的功能 因为它只在类的构造函数中执行此操作 我能看到让我的代码重新检查设备列
  • hibernate 选择所有投影分组依据

    在hibernate Criteria规范中 如果我想对表中的属性进行分组 我必须使用Projections groupProperty 问题是我无法选择表中的所有字段 我想要的是 SELECT FROM 实体 GROUP BY 字段 如果
  • C Python API 扩展忽略 open(errors="ignore") 并始终抛出编码异常

    给定一个文件 myfiles file with invalid encoding txt无效的 UTF8 为 parse this correctly F B r also parse this correctly 我正在使用内置的Pyt
  • 使用CMD终端时Python无法显示希伯来语

    我正在尝试在我的代码中使用希伯来字符 但我的终端 CMD 不支持希伯来语 而是只显示随机问号 例如 gt gt gt Print result 编辑 CMD 控制台的默认字体中根本没有希伯来字母 您只需更改字体即可显示希伯来语 这将影响命令
  • powershell出现错误时如何获取错误代码?

    我的片段是这样的 msg Remove Item Recurse Force C users bkp 2 gt 1 if LASTEXITCODE eq 1 Encountered error during Deleting the Fol
  • InternetReadFile 的常见平均缓冲区大小是多少?

    我在 Delphi 中使用 WinInet h 通过 HTTP 下载平均大小在 30 KB 到 1 5 MB 之间的文件 var Buf array 0 BUFFER SIZE 1 of Byte while BOOL InternetRe