哪种类型的文件访问使用
Which type of file access to use?
我只为Windows建立一个自定义文件格式的IO框架。这些文件在100MB和100GB之间。读取/写入以不可预测的位置序列为几百kb。不过,阅读速度是最关键的,但是,CPU使用可能会胜过,因为我听到Fstream在与SSDS合作时可能会给它带来真正的凹痕。
最初,我打算使用FSTREAM,但是当我将更多红色添加到文件IO中时,我发现了许多其他选项。由于我对这个主题的经验很少,因此我对使用哪种方法感到沮丧。我所算出的选项是fstream,file和映射文件。
到目前为止,在我的研究中,我发现的只是很多矛盾的基准结果,具体取决于我不了解的块大小,缓冲尺寸和其他瓶颈。如果有人可以澄清这些选项之间的优势/缺点,这将是有帮助的。
在这种情况下,瓶颈主要是您的硬件,而不是您使用的库,因为您正在阅读的块是相对较大的200KB -5MB(与扇区大小相比)和顺序(所有这些一个)。使用硬盘(高寻求时间),可以读取比优化缓存所需的更多数据的感觉。对于SSD,我不会使用大型缓冲区,但仅读取确切所需的数据,因为寻求时间不是一个大问题。
内存映射的文件很方便,可以完全随机访问数据,尤其是在小块(甚至很少)中。但是需要更多代码来设置内存映射的文件。在64位系统上,您可以(实际上)映射整个文件,然后让OS缓存系统优化读取(多次访问对同一数据)。然后,您只需将指针返回所需的内存位置即使需要临时缓冲或使用memcpy也可以返回所需的内存位置。这将非常简单。
fstream为您提供了与文件相比,我认为在您的情况下使用的功能并不多。
相关文章:
- C ++程序编译错误,找不到/访问文件
- 从文件读取,并循环访问文件以写入数组
- 确实可以提高directory_iterator在Windows上按字母顺序访问文件和文件夹
- 如何在 bash 中使用管道在 c++ 中使用 getenv() 访问文件?
- 循环访问文件的每一行
- 无法从另一个函数访问文件范围变量的内容
- 如何访问文件的二进制数据?
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- C++ 写入随机访问文件
- 无法从.cpp访问 .h 文件中的私有成员变量
- boost :: filesystem :: verver()无法访问文件,因为另一个过程正在使用该文件
- 如何在 Qt/C++ 中仅将文件路径作为字符串访问文件
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 如何访问 C 文件中C++公共布尔类成员(进行验证)
- 随机访问文件格式,用于分层组织的二进制文件和文本文件
- 连接到 FTP 服务器并访问文件
- 频繁访问文件映射内存
- 'Good'通过条目维护/更新/访问文件的编程形式
- 访问文件中的单个字符效率低下?(C++)
- wxwidgets类访问文件属性