【发布时间】:2011-07-28 13:50:53
【问题描述】:
如果文件大小约为 1-2GB,向现有文件添加标头(例如文件元数据)的最佳方法是什么?
在 C++ 中
【问题讨论】:
-
我猜它与文件系统而不是语言有关。
如果文件大小约为 1-2GB,向现有文件添加标头(例如文件元数据)的最佳方法是什么?
在 C++ 中
【问题讨论】:
最好的方法是简单地将标头写入 new 文件,然后附加旧文件的内容。
C++ 没有在现有文件的开头提供 insert 的方法,因此这确实是最好的选择。只要确保从旧文件中读取足够大的块并将它们附加到新文件中。虽然缓冲将缓解大部分以小块执行此操作的问题,但您仍然会遇到更多函数调用的性能下降。
这可能很小,但仍然存在。对于 2G 文件,除非内存非常宝贵,否则我可能会先以半千兆块的形式进行。这允许更大的文件大小而不会浪费太多内存,并且四个读/写调用不太可能成为性能问题。
但是,与所有优化一样,要衡量,不要猜测。 C++ 标准文档没有提到(正确地)有各种可能影响性能的低级事物。由于您的问题没有提及特定的操作系统,因此我已根据此进行了回答,但是这些特定的操作系统可能(a)反应不同; (b) 提供其他可以更快的非标准调用。
【讨论】:
唯一的方法是,在任何语言中,将标题写入新文件,将旧文件的内容复制到其中,然后重命名文件。 p>
【讨论】:
取决于 (1) 文件系统及其参数(如块的大小),(2) 您必须预先添加的标头大小,(3) 写入文件的人。
如果您自己生成文件 (1-2Gb),则只需在文件开头为标题保留字节即可。
【讨论】:
如果你真的想要超强的性能,我想你也可以通过一些低级文件系统操作来做到这一点。但我不建议走那条路。
我也喜欢 Sege Dundich 发布的关于在最初写入文件时为标题保留空间的想法,但您可能没有该选项可用。
【讨论】: