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