あなたの検索基準が何であるか正確にはわかりません。一致する文字列が常に最後にあることをほのめかします。ここでは、一般的な考え方を示す簡単な時間テストをいくつか示します。テストは 2 つの文字列を検索します。最初の文字列はターゲットに存在せず、2 番目の文字列は存在します。
string.IndexOf 240 nanoseconds (to find string anywere in string, not just at end)
string.EndsWith 210 nanoseconds
Regex.Match 1,285 nanoseconds
precompiled Regex 648 nanoseconds
テストコードは以下です。これは、結果からタイミング テストのオーバーヘッド (ブラケット ループなど) を取り除く、私が書いた小さなベンチマーク ユーティリティを使用します。私は正規表現の専門家ではないので、私の検索パターンが文字列テストと同等であることを願っています。
string s = "zzzzzzzzzzzzzzzzzzzzzzzsomething";
string search1 = "thinker";
string search2 = "something";
int pos = 0;
new Bench().Time("string.IndexOf", (c) => {
for (int i = 0; i < c; i++) {
if ((pos = s.IndexOf(search1)) < 0) {
pos = s.IndexOf(search2);
}
}
});
bool found = false;
new Bench().Time("string.EndsWith", (c) => {
for (int i = 0; i < c; i++) {
if (!(found = s.EndsWith(search1))) {
found = s.EndsWith(search2);
}
}
});
string pattern = "(" + search1 + "|" + search2 + ")$";
Match match = null;
new Bench().Time("Regex.Match", (c) => { for (int i = 0; i < c; i++) match = Regex.Match(s, pattern); });
Regex regex = new Regex(pattern, RegexOptions.Compiled);
new Bench().Time("precompiled", (c) => { for (int i = 0; i < c; i++) match = regex.Match(s); });