J'essaie d'analyser de grandes chaînes de caractères que j'ai chargées en mémoire depuis un fichier. J'analyse des séquences d'ADN (stockées sous forme de chaîne) avec une fenêtre glissante de longueur variable. Le problème est que les chaînes sont si grandes qu'il faut un temps très long pour les parcourir. Je ne sais pas si c'est possible, mais est-il possible d'accélérer le processus d'une manière ou d'une autre ?
Je veux dire que je m'attendais à ce que les entrées/sorties dominent mon application et j'ai donc changé ma lecture ligne par ligne pour lire tout le fichier en mémoire en une seule fois, mais après avoir testé mon code, j'ai découvert qu'il passait la plupart du temps dans une boucle comme celle-ci :
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;
}
Il ne faut que quelques secondes pour charger la séquence en mémoire à partir d'un fichier, mais il faut ~30 minutes pour analyser la séquence (même après avoir commenté le traitement sous l'appel substr()). Est-ce qu'il y a quelque chose qui m'échappe et qui ajoute beaucoup de surcharge ou est-ce que c'est probablement dû à la taille de mes données ?
Serait-il utile de mentionner que je peux ignorer les sous-chaînes comportant des caractères autres que ATCG ? Je veux dire que je fais ce filtrage dans mon code mais seulement après avoir obtenu les chaînes de substr.
C'est la première fois que je poste, et mon C++ est un peu rouillé. Tout commentaire serait grandement apprécié.