我试图解析,我已经加载到存储器中的文件大串的解析。我用可变长度的滑动窗口解析DNA序列(以字符串形式存储)。问题是这些字符串非常大,需要很长时间才能遍历它们。我不知道这是否是可能的,但有可能以某种方式加速这个过程?C++加快多SUBSTR()或同等功能要求大串
我的意思是我期望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++是有点生疏。任何反馈将不胜感激。
'substr'与'std :: string :: substr'有关吗?也许你的意思是'seq.substr(...)'? –
不应该'currentLinePos'增加'windowSize'而不是1?或者你的意思是'currentCharNumber'? – sonicwave
也许你应该告诉我们更大的上下文,所以你可以改进算法,以避免使用'substr'。 – Nobody