Optimiser une regex de 10 secondes ?

[Résolu]
Signaler
Messages postés
134
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009
-
Messages postés
134
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009
-
Bonjour,

je connais assez mal les regex et je cherche un moyen d'optimiser cette requete :
Regex   post_quote = new Regex(@"<textarea.*>(?<texte>.*)</textarea>", RegexOptions.Singleline);
Match_post_quote = post_quote.Match(work);
Actuellement pour faire juste ca, j'en ai pour 10 secondes... c'est un peu genant car j'ai ais une 30aine à faire comme ca et très fréquement.

Le texte dans la variable "work" correspond à un fichier HTML d'environ 13ko (environ 50 000 caractères) et la petite partie qu'il faut recuperer correspond à ca par exemple :
<td colspan="9">
              <textarea name="message" rows="15" cols="35" wrap="virtual" style="width:450px" tabindex="3" class="post" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);">hqghrkghksh
thjygjgf

tfjgykjgu
k
</textarea>
              </td>
Vous auriez une idée pour optimiser ?

Merci d'avance ;) 

3 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Je ne suis pas un grand connaisseur non plus, mais en attendant qu'un connaisseur te donnes une bonne réponse, tu peux peut-être commencer par faire un RegexOptions.Compiled ce qui devrait augmenter la vitesse d'exécution... (si t'as un gain, tu pourrais me dire de combien? Je suis intéressé de savoir ).

<hr size="2" />VC# forever
Messages postés
134
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009

Merci bien. Avec ca j'ai gagné une reduction par presque deux du temps d'execution... c'est tout de même pas négligeable.

Mais si jamais quelqu'un a une autre astuce en plus je veux bien. Je me suis appercu dans un même temps que selon la taille des pages, le temps d'execution pouvait jusque quintupler.

Pour vous apporter même un peu plus de precision, il s'agit d'une page d'un forum phpbb que je parse pour recuperer simplement le "quote" (je sais pas si vous voyez ce que je veux dire ...). Donc si vous voyez une astuce...

ps: je vais essayer de faire un split juste avant pour voir si je gagne un peu de temps.
Messages postés
134
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009

J'avais oublié que la fonction split ne correspondait pas du tout à ca mais j'ai gardé l'idée pour décomposer en deux requetes :

Regex   pre_post_quote = new Regex(@"(?.*)</textarea>", RegexOptions.Compiled|RegexOptions.Singleline);
Regex   post_quote = new Regex(@"<textarea.*>(?<texte>.*)", RegexOptions.Compiled|RegexOptions.Singleline);
Pour tout dire je suis assez etonné que cela fonctionne... mais j'ai un temps d'execusion de 35 ms pour la première et 15 ms pour les suivantes.

Je testerai bien quand j'aurai le temps si le problème ne venait pas de "<textarea.*>" mais vu que j'ai pas trop le temps et que c'est totalement acceptable, je vais garder ca comme ca pour le moment :)