首先,一些背景知识——我正在为一个个人项目编写一个基本的 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 上打开。