在 C# 和 C++ 中,从网络文件中读取所有字节会产生截然不同的结果。 C++ 花费的时间接近 C# 的三倍
C#
File.ReadAllBytes(filepath);
C++
std::ifstream str_in(fp, std::ifstream::binary);
int data_rem = fs_len;
int data_read = 0;
while (data_rem>0)
{
str_in.read(buffer+ data_read, 1024*1024*1);
data_rem -= str_in.gcount();
data_read += str_in.gcount();
}
使用 C 结构文件给出与 C++ 相同的结果
最佳答案
钻入 C# source code我们可以看到它正在从 kernal32.dll 调用 ReadFile,在 C++ 中复制相同的代码可提供相同的性能。
HANDLE f_handle = CreateFile(fp, GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD read=0;
ReadFile(f_handle, buffer, fs_len, &read, NULL);
CloseHandle(f_handle);
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365430(v=vs.85).aspx
关于C# File.ReadAllBytes 与 std::ifstream (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544389/