gpt4 book ai didi

c++ - 与其他方法相比,为什么我对 TransmitFile 的调用性能不佳?

转载 作者:行者123 更新时间:2023-11-30 04:39:44 26 4
gpt4 key购买 nike

首先,介绍一下背景 --我正在为个人项目编写一个基本的 FTP 服务器。我目前正在检索文件。我当前的实现如下所示:

HANDLE hFile = CreateFile("file.tar.gz", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
TransmitFile(sd, hFile, fileSize, 65536, NULL, NULL, TF_USE_KERNEL_APC | TF_WRITE_BEHIND);
CloseHandle(hFile);

它有效,但性能值得怀疑。起初,传输速度大约为 10 MB/s,但慢慢下降到大约 3 MB/s。使用 FileZilla Server 和 IIS FTP,它保持一致的 >30 MB/s 的传输速度。因此,我知道它没有发挥其全部能力。我试过修改缓冲区大小,但它并没有提高性能。 如果有人对更有效的文件传输方式有任何建议,请告诉我。 API 文档似乎表明 TransmitFile 针对我的应用程序进行了优化,这就是我选择使用它的原因。 [请原谅我缺乏 Windows API 知识。]

此外,所有套接字都在本地主机上打开。

最佳答案

在开始传输之前,您是否通过设置 SO_SNDBUFSO_RCVBUF 套接字选项来增加套接字的 TCP 缓冲区大小(以及可能的 TCP 窗口大小)? (在绑定(bind)之后和连接之前执行)?

从问题的声音来看,启动较快然后变慢,我猜这是一个 TCP 流量控制问题(可能是因为 TCP 窗口比您想要的要小)。使用 Wireshark 查看数据流会很有用(最好是在我上面建议的更改之前和之后)。

参见:

关于c++ - 与其他方法相比,为什么我对 TransmitFile 的调用性能不佳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com