String.TrimEnd()比使用一個正則表達式更快:
var digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
var input = "123ABC79";
var result = input.TrimEnd(digits);
基準應用程式:
string input = "123ABC79";
string pattern = @"\d+$";
string replacement = "";
Regex rgx = new Regex(pattern);
var iterations = 1000000;
var sw = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
{
rgx.Replace(input, replacement);
}
sw.Stop();
Console.WriteLine("regex:\t{0}", sw.ElapsedTicks);
var digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
sw.Restart();
for (int i = 0; i < iterations; i++)
{
input.TrimEnd(digits);
}
sw.Stop();
Console.WriteLine("trim:\t{0}", sw.ElapsedTicks);
結果:
regex: 40052843
trim: 2000635
開發商有問題。他知道他可以通過正則表達式來解決它。現在他有兩個問題。 – Oliver 2014-12-04 08:12:31
我已經多次聽到這個說法,並且我理解它的重點。但是,你會建議,而不是正則表達式來解決這個問題?循環訪問字符數組會感覺更加骯髒。 – tdgtyugdyugdrugdr 2014-12-04 08:18:58
也許感覺更骯髒,但在引擎蓋下RegEx沒有任何其他。保持一個(也許是複雜的)正則表達式更加骯髒,然後在一個簡單的循環中表達相同的內容。我不想說:「永遠不要使用正則表達式」,但是您也許應該只在真正需要時才使用它們,並且可能會在RegEx的解釋中添加一條重要評論,因爲它往往只是*只寫*碼。嗯,在我忘記之前:爲這個方法編寫一個單元測試,將用很多不同的字符串(可能通過'TestCaseSource')來處理,以確保你將來不會破壞任何東西。 – Oliver 2014-12-04 08:27:13