C#秒表错误?

Mee*_*tat 0 c# stopwatch

当我创建一个包含方法的数组时,stopwatch.elapsedMilliseconds总是返回0.

例:

int[] methods = {method1(), method2()};

Stopwatch sw = new Stopwatch();

sw.Start();
int val = methods[1];
sw.Stop();

Console.WriteLine("It took {0} ms", sw.ElapsedMilliseconds);
// Output: "It took 0 ms"
Run Code Online (Sandbox Code Playgroud)

当我直接调用该方法时,秒表正常工作:

Stopwatch sw = new Stopwatch();

sw.Start();
method1();
sw.Stop();

Console.WriteLine("It took {0} ms", sw.ElapsedMilliseconds);
// Output: "It took x ms"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:实际主要代码:

 static void Main(string[] args)
        {
            Stopwatch t = new Stopwatch();
            Func<int>[] problems = new Func<int>[] { problem5, problem6 };


            for (int i = 0; i < problems.Length; i++)
            {
                t.Restart();
                Console.WriteLine("Solution to {0} is: {1}", problems[i].Method.Name , problems[i]());
                t.Stop();
                Console.WriteLine("It took {0} ms ", t.ElapsedMilliseconds);


            }

            Console.ReadKey();


        }
Run Code Online (Sandbox Code Playgroud)

输出: http://puu.sh/3Znwd.png

xan*_*tos 5

int[] methods = new[] { method1(), method2() };
Run Code Online (Sandbox Code Playgroud)

这一次直接调用method1(),并method2()在你的Stopwatch!

尝试

Func<int>[] methods = new Func<int>[] { method1, method2 };

t.start();
methods[1]();
Run Code Online (Sandbox Code Playgroud)

Func<int>[] methods = new Func<int>[] { method1, method2 };

Stopwatch sw = new Stopwatch();

for(int i = 0; i < methods.Length; i++)
{
    sw.Restart(); // or sw.Reset(); sw.Start();
    methods[i]();
    sw.Stop();

    Console.WriteLine("{0} took {1} ms", allMethods[i].Method.Name, sw.ElapsedMilliseconds);      
}
Run Code Online (Sandbox Code Playgroud)

  • @MeesterPatat - 不,在你的例子中,你只得到`methods [0]`的值,这是你第一次初始化数组时`method1`返回的值. (2认同)