如何测量两个不同的代码

时间:2012-06-22 06:18:54

标签: c#

如何比较.equals("").IsNullOrEmpty?我想知道哪两个更快。我听说过使用ticks但还不熟悉如何编写代码。

4 个答案:

答案 0 :(得分:1)

您可以使用StopWatch类来衡量代码的执行时间。启动秒表,运行几千次迭代,停止并查看已用时间。对其他实现执行相同的操作。另外,请确保尝试一些边缘情况,例如比较null或空字符串甚至是非常长的字符串。只需将"foo"十几次与""进行比较就无法证明任何事情。

请注意,答案很可能与您的问题完全无关。您可以更好地花时间改进代码的其他部分。

答案 1 :(得分:1)

机会是isNullOrEmpty更快,因为它是特殊目的。正如其他已发表评论的人所指出的那样,这是一个非常微不足道的优化。

答案 2 :(得分:1)

以下列方式使用StopWatch

// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();

// Begin timing
stopwatch.Start();

// Do something here

// Stop timing
stopwatch.Stop();

答案 3 :(得分:1)

正如其他人所说,这是过早的优化,可能不值得你花时间。但是,为了答案,你可以这样做:

using System;
using System.Diagnostics;

namespace ConsoleApplication1 {   
    class Program {   
        static void Main(string[] args) {
            int COUNT = 1000000000;
            String str = "Something";

            Stopwatch sw = Stopwatch.StartNew();
            sw.Start();
            for (int i = 0; i < COUNT; i++) {
                if (str.Equals("")) {
                }
            }
            Console.WriteLine(sw.ElapsedTicks);

            sw = Stopwatch.StartNew();
            sw.Start();
            for (int i = 0; i < COUNT; i++) {
                if (String.IsNullOrEmpty(str)) {
                }
            }
            Console.WriteLine(sw.ElapsedTicks);

            Console.ReadLine();
        }
    }
}

输出适合我:

21426768  // Equals("")
12365410  // IsNullOrEmpty() <-- faster

请注意,str.Equals("")String.IsNullOrEmpty(str)不会给您相同的结果。显然,第一个会引发NullReferenceException,str为空。