gpt4 book ai didi

c++ - 如何高效地写入大量文件

转载 作者:行者123 更新时间:2023-11-28 01:37:51 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,根据每个序列的特定片段内的值将大量基因序列分成许多文件。例如序列可能看起来像

AGCATGAGAG...
GATCAGGTAA...
GATGCGATAG...
... 100 million more

目标是根据从位置 2 到 7(6 个碱基)的序列将读取拆分为单独的文件。所以我们得到类似的东西

AAAAAA.txt.gz
AAAAAC.txt.gz
AAAAAG.txt.gz
...4000 more

现在我天真地实现了一个 C++ 程序

  • 读取每个序列
  • 打开相关文件
  • 按顺序写
  • 关闭文件

有点像

#include <zlib.h>

void main() {
SeqFile seq_file("input.txt.gz");
string read;

while (read = seq_file.get_read) {
string tag = read.substr(1, 6);
output_path = tag + "txt.gx";

gzFile output = gzopen(output_path.c_str(), "wa");
gzprintf(output, "%s", read);
gzclose(output);
}
}

与仅将全部内容写入单个其他文件相比,这慢得令人无法忍受。

这种情况的瓶颈是什么?考虑到由于系统限制我无法同时打开所有文件,我该如何提高性能?

最佳答案

由于打开文件很慢,您需要减少打开文件的数量。实现此目的的一种方法是对您的输入进行多次传递。打开输出文件的一个子集,传递输入并只将数据写入这些文件。完成后,关闭所有这些文件,重置输入,打开一个新的子集,然后重复。

关于c++ - 如何高效地写入大量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com