ファイルからメモリにロードした大きな文字列を解析しようとしています。可変長のスライディング ウィンドウで DNA シーケンス (文字列として保存) を解析しています。問題は、文字列が非常に大きいため、反復処理に非常に長い時間がかかることです。それが可能かどうかはわかりませんが、どうにかしてこれをスピードアップすることは可能ですか?
つまり、I/O がアプリケーションを支配すると予想していたので、1 行ずつ読み取りをファイル全体を一度にメモリに読み込むようにシフトしましたが、コードをテストした後、ほとんどの時間を次のようなループで費やしていることがわかりました。
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++ は少し錆びています。どんなフィードバックでも大歓迎です。