虽然问题check if input is type of string已关闭 其中两个答案在我脑海中激起了一个微优化问题:以下两种解决方案中哪一种会表现更好?
Reed Copsey提供了 solution using Char.IsLetter
:
string myString = "RandomStringOfLetters";
bool allLetters = myString.All( c => Char.IsLetter(c) );
改编solution using regex来自 Mark Byers :
string s = "RandomStringOfLetters";
bool allLetters = Regex.IsMatch(s, "^[a-z]+$", RegexOptions.IgnoreCase);
不想只问 Reed 或 Mark 的问题,我想我应该编写一个快速测试来确定哪个表现更好。问题是我没有做很多代码优化(我倾向于把代码的可读性放在首位)。
除了在每个运行之前和之后获取时间戳之外,还有哪些其他(更好的?)选项可以确定哪个解决方案运行得更快?
编辑
我修改了Martin's answer使用 Console.WriteLine(...)
并将其作为控制台应用程序运行。不确定到底如何 LinqPad运行应用程序,但结果大致相同:
41 178
最佳答案
您需要这样做,使用 Stopwatch 测量运行时间.此外,在进行分析时,请记住以下几点非常重要的事情:
- 始终运行测试 1 次以上。第一次运行它时,JIT 会产生开销,而且计时可能会产生误导。运行多次并取平均值是一个很好的方法(例如,我经常运行这样的测试 100,000 次。)
- 始终在 Visual Studio 托管进程之外使用完整的发布版本运行测试。 (默认情况下,您可以为此使用 Ctrl+F5。)Visual Studio 主机会显着影响计时。
关于c# - 如何测试哪种方法实现运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301288/