私のマシンでは、AVあなたのコードのariationが最速です(あなたの秒で来る)。
注記ティックは100ナノ秒単位で増加します。
私のばらつきが(無置換)だけ唯一のスプリットにある
SplitReplace takes 0.961795 ticks per call
Split takes 0.747009 ticks per call
Regex takes 2.512739 ticks per call
WithLinq takes 2.59299 ticks per call
:
string[] parts = val.Split('(', ')');
return parts[1];
テストコード...今のパフォーマンス
[Test]
public void SO()
{
const string input = "name +value (email)";
TestGivenMethod(input, SplitReplace, "SplitReplace");
TestGivenMethod(input, JustSplit, "Split");
TestGivenMethod(input, WithRegex, "Regex");
TestGivenMethod(input, WithLinq, "WithLinq");
}
private void TestGivenMethod(string input, Func<string, string> method, string name)
{
Assert.AreEqual("email", method(input));
var sw = Stopwatch.StartNew();
string res = "";
for (int i = 0; i < 1000000; i++)
{
var email = method(input);
res = email;
}
sw.Stop();
Assert.AreEqual("email", res);
Console.WriteLine("{1} takes {0} ticks per call", sw.ElapsedTicks/1000000.0, name);
}
string SplitReplace(string val)
{
string[] parts = val.Split('(');
return parts[1].Replace(")", String.Empty);
}
string JustSplit(string val)
{
string[] parts = val.Split('(', ')');
return parts[1];
}
private static Regex method3Regex = new Regex(@"\(([\[email protected]]+)\)");
string WithRegex(string val)
{
return method3Regex.Match(val).Groups[1].Value;
}
string WithLinq(string val)
{
return new string(val.SkipWhile(c => c != '(').Skip(1).TakeWhile(c => c != ')').ToArray());
}
どのように悪いのですか?最高のパフォーマンスを望んでいるが、回答を得るための指標を提供していないので、私は尋ねる。 –
パフォーマンスの違いは、通常はごくわずかです。次のいずれかに該当する場合にのみ気付くでしょう。処理の大きなループを実行する、またはビデオゲームを実行する。いずれにしても、製品を使用してパフォーマンスが実際に問題であると特定しないかぎり、「より良いパフォーマンスです」に取り組むべきではありません。 – Dracorat