我正在尝试解析从文件加载到内存中的大字符串。我正在使用可变长度的滑动窗口解析 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++有点生疏。任何反馈将不胜感激。