我正在尝试解析从文件加载到内存中的大字符串。我正在使用可变长度的滑动窗口解析 DNA 序列(存储为字符串)。问题是字符串太大了,需要很长时间才能遍历它们。我不知道这是否可能,但有可能以某种方式加快速度吗?
我的意思是我希望 I/O 主宰我的应用程序,所以我将逐行读取转换为一次将整个文件读入内存,但在测试我的代码后,我发现它大部分时间都在这样的循环中:
size_t currentCharNumber = 0;
int16_t windowSize = 50;
//seq is a string of length 249250621
while(seq.length() - currentLinePos < windowSize)
{
string temp = seq.substr(currentLinePos, windowSize);
//do stuff to temp
++currentLinePos;
}
将序列从文件加载到内存只需要几秒钟,但解析序列需要大约 30 分钟(即使在注释掉 substr() 调用下面的处理之后)。有什么我遗漏的东西会增加很多开销,还是可能是由于我的数据大小?
提一下我可以忽略带有 ATCG 以外的字符的子字符串会有所帮助吗?我的意思是我在我的代码中做这个过滤,但只有在我从 substr 获取字符串之后。
这是我第一次发帖,我的 C++ 有点生疏。任何反馈将不胜感激。