写入更多文件的最佳方式是什么,而不是内核允许一次打开?

Elp*_*rto 3 c c++ performance fopen fwrite

我有一个非常大的二进制文件,我需要根据输入文件中的id创建单独的文件.有146页输出的文件,我使用cstdlibfopenfwrite.FOPEN_MAX是20,所以我无法同时打开所有146个输出文件.我还想最小化打开和关闭输出文件的次数.

如何有效地写入输出文件?

cstdlib由于遗留代码,我还必须使用该库.

可执行文件还必须是UNIX和Windows跨平台兼容的.

Mic*_*urr 5

您可能会采取几种可能的方法:

  • 保持打开的输出文件句柄的缓存小于FOPEN_MAX - 如果需要对已经打开的文件进行写操作,那么只需执行写操作.否则,关闭缓存中的一个句柄并打开输出文件.如果您的数据通常在一组特定文件的数据方面聚集在一起在输入文件中组合在一起,这应该适用于文件句柄缓存的LRU策略.

  • 自己处理输出缓冲而不是让库为你做:保留你自己的146(或者你可能需要多少)输出缓冲区并将输出缓冲到那些,并在特定输出时执行打开/刷新/关闭缓冲区被填满.您甚至可以将其与上述方法相结合,以最大限度地减少打开/关闭操作.

请确保您在填充或接近填充输出缓冲区时可能发生的边缘条件测试良好.