String.Contains() は String.IndexOf() より高速ですか? 質問する

String.Contains() は String.IndexOf() より高速ですか? 質問する

約 2000 文字の文字列バッファがあり、バッファに特定の文字列が含まれているかどうかを確認する必要があります。
すべての Web 要求に対して ASP.NET 2.0 Web アプリケーションでチェックを実行します。

誰か知っていますか?String.Contains メソッドより優れたパフォーマンスを発揮String.IndexOf メソッド?

    // 2000 characters in s1, search token in s2
    string s1 = "Many characters. The quick brown fox jumps over the lazy dog"; 
    string s2 = "fox";
    bool b;
    b = s1.Contains(s2);
    int i;
    i = s1.IndexOf(s2);

楽しい事実

ベストアンサー1

Contains呼び出しIndexOf:

public bool Contains(string value)
{
    return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}

これは を呼び出しCompareInfo.IndexOf、最終的には CLR 実装を使用します。

CLRで文字列がどのように比較されるかを確認したい場合はこれはあなたを示します(探す大文字と小文字を区別しないCompヘルパー)。

IndexOf(string)オプションはなく、Contains()序数比較 (スマート比較を実行しようとするのではなく、バイトごとの比較、たとえば e と é) を使用します。

したがって、 kernel32.dll の FindNLSString を使用して直接文字列検索を実行するIndexOfため、わずかに高速になります (理論上) IndexOf(リフレクターの威力!)。

.NET 4.0 用に更新-IndexOf はもはや序数比較を使用しません。そのため、Contains はより高速になります。以下のコメントを参照してください。

おすすめ記事