2017-04-02 11 views
0

私はパフォーマンスはそれがCPUのほとんどは、IndexOfの機能ここでIndexOfの選択を調整できますか?

enter image description here

機能で使用されていることが判明し、長い時間

のためのアプリケーションをプロファイリングしてい

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

文字列の長さは関係ありますか?シークする文字列の長さを短くすることができます

答えて

2

サブストリングの検索がボトルネックになる場合は、KMPなどの高度なアルゴリズムに切り替えることができます。

「フォールスポジティブ」が多い場合、デフォルトの文字列検索は非常に高額になる可能性があります。多くのテキストが検索されます。

<div id="... 

マッチが開始されない位置で上記の接頭辞が検出されるたびに、デフォルトアルゴリズムはマッチがないことを確認するのに必要な回数だけ追従し、次の位置に移動します。対照的に、KMPはすでに見た多くの文字をスキップし、効率を改善します。

+0

答えてください。私はC#はそれをネイティブサポートしていないと私はコードする必要があると仮定していますか? – MonsterMMORPG

+0

私は思ったようにok。その文字列に近い開始インデックスを与えると、100回以上改善されます:) – MonsterMMORPG

1

IndexOf(文字列)オーバーロードは、現在のカルチャを使用して比較を行います。

StringComparisionオーバーロードを使用して序数検索を行うと、パフォーマンスが向上します。あなたがやっていることに応じて〜8倍。

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

wow私はこれを知っていません – MonsterMMORPG

関連する問題