【发布时间】:2011-01-01 10:57:18
【问题描述】:
首先,介绍一下背景—— 我正在为个人项目编写一个基本的 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 服务器和 IIS FTP,它保持一致的 >30 MB/s 传输速度。因此,我知道它没有充分发挥作用。我尝试过修改缓冲区大小,但并没有提高性能。
如果有人对更有效的文件传输方式有任何建议,请告诉我。 API 文档似乎表明 TransmitFile 已针对我的应用程序进行了优化,这就是我选择使用它的原因。
[请原谅我缺乏 Windows API 知识。]
此外,所有套接字都在 localhost 上打开。
【问题讨论】:
-
你不应该使用 '|' 来组合你的标志而不是 '&' 吗?
-
呃,是的,这是一个错误。感谢您指出了这一点。 xD [虽然它仍然没有帮助。 :(]
-
你有没有从 asio 尝试过这个例子:think-async.com/Asio/asio-1.4.1/src/examples/windows/…
标签: c++ winsock transmitfile