2017-04-02 2 views
0

J'ai la performance profile l'application depuis longtempsPuis-je régler la sélection d'IndexOf?

Il se trouve que la majeure partie de la CPU est utilisé par la fonction IndexOf

enter image description here

Ici la fonction

public static string func_Fix_Google_Source(string srSource) 
{ 
    int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">"); 
    return srSource.Substring(irIndex); 
} 

La longueur de la chaîne aurait de l'importance? Je peux raccourcir la longueur de la chaîne de recherche je crois

Répondre

2

Si la recherche de sous-chaîne devient un goulot d'étranglement, vous pouvez passer à un algorithme avancé, tel que KMP.

La recherche de chaîne par défaut peut être très coûteuse lorsque vous avez beaucoup de "faux positifs", par ex. lots de

<div id="... 

dans le texte recherché.

Chaque fois que le préfixe ci-dessus est découvert à une position où une correspondance ne démarre pas, l'algorithme par défaut le suit autant de fois que nécessaire pour confirmer l'absence de correspondance, puis passe à la position suivante. En revanche, KMP saute de nombreux caractères qu'il a déjà vu, améliorant l'efficacité.

+0

ty pour la réponse. Je suppose que C# ne supporte pas nativement et je dois coder? – MonsterMMORPG

+0

ok comme je pensais. donner l'indice de départ près de cette chaîne s'améliore jusqu'à 100+ fois :) – MonsterMMORPG

1

En plus d'améliorer la façon dont vous effectuez la recherche, ce que vous avez peut-être déjà fait par vos commentaires, la surcharge IndexOf (string) utilise la culture actuelle pour faire ses comparaisons. L'utilisation de la surcharge StringComparision pour effectuer une recherche ordinale donnera de meilleures performances. En fonction de ce que vous faites ~ 8x.

int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">", StringComparison.Ordinal); 
+0

wow je ne savais pas cela – MonsterMMORPG