C# File.ReadAllBytes 与 std::ifstream (Windows)

标签 c# c++ windows

在 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/

相关文章:

c++ - Windows GDI 上下文 - LoadImage

c++ - 如何使用智能指针动态向上转换和向下转换?

windows - 查看第 3 方 DLL 中的可用消息字符串(来自 mc.exe)

c# - 使用任务保持 UI 响应,处理 AggregateException

c# - 微软视觉 C# : Eclipse-style autocomplete for interface methods

c# - LIKE 命令 Mysql

c# - 如何检查类型是否是可移植库中的结构

c++ - 如何将字符串转换为其 unicode 转义符?

android - 跨平台建议 Android/iOS/Windows

windows - 需要帮助/说明在 Windows 下使用 libdav1d 构建 ffmpeg