c# - 如何测试哪种方法实现运行得更快

标签 c# optimization micro-optimization premature-optimization speed-test

虽然问题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. 始终运行测试 1 次以上。第一次运行它时,JIT 会产生开销,而且计时可能会产生误导。运行多次并取平均值是一个很好的方法(例如,我经常运行这样的测试 100,000 次。)
  2. 始终在 Visual Studio 托管进程之外使用完整的发布版本运行测试。 (默认情况下,您可以为此使用 Ctrl+F5。)Visual Studio 主机会显着影响计时。

关于c# - 如何测试哪种方法实现运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301288/

相关文章:

c# - 过滤掉有条件的不同元素

c# - 获取产品 ID 和供应商 ID

sql - 如何优化 View ?

algorithm - 给定 2d 中的一小组点,如何绘制在每个点周围不重叠的圆,以便它们的半径最大化?

java - Java 中的私有(private)内部类是否有性能开销?

c# - c#中字符串到日期的转换

c# - 如何在不重定向的情况下检索 HTML 页面?

javascript - 移动设备的最大图像/SpriteSheet 尺寸 Phaser.js

assembly - 根据 EAX >= 0 条件将 EDX 设置为 0 或 -1?

python - 在 Python 中加速双循环