如何在c#中测量并行任务或多线程程序的总执行时间?

问题描述 投票:1回答:2

我是C#/。NET的新手。在这里,我尝试运行以下并行任务并测量总执行时间。

但是运行代码后,执行时间仅显示> 6 ms,这比预期的要少。我不确定Stopwatch()函数是否有错位,从而产生了意外的结果。

您的帮助将不胜感激:

namespace Tests
{
    class Prod
    {
        static void Main(string[] args)
        {
            Stopwatch s = new Stopwatch();
            s.Start();
            {
                Task T1 = Task.Run(() =>
                {
                    for (int i = 0; i <= 5000; i++)
                        Console.WriteLine("Test1:" + i);
                });
                Task T2 = Task.Run(() =>
                {
                    for (int i = 0; i <= 5000; i++)
                        Console.WriteLine("Test2:" + i);
                });
                Task T3 = Task.Run(() =>
                {
                    for (int i = 0; i <= 5000; i++)
                        Console.WriteLine("Test3:" + i);
                });

            }
            s.Stop();
            Console.WriteLine("Press any key to quit");
            Console.ReadKey();


            Console.WriteLine("Total Task Ellapsed time -> {0}", s.ElapsedMilliseconds);
        }

    }

}


c# .net task-parallel-library stopwatch execution-time
2个回答
0
投票

一种解决方案是等待使用Task.WaitAll完成所有任务

Task.WaitAll(T1,T2,T3);

完整代码

    Stopwatch s = new Stopwatch();
    s.Start();
    {
            Task T1 = Task.Run(() =>
            {
                for (int i = 0; i <= 5000; i++)
                    Console.WriteLine("Test1:" + i);
            });
            Task T2 = Task.Run(() =>
            {
                for (int i = 0; i <= 5000; i++)
                    Console.WriteLine("Test2:" + i);
            });
            Task T3 = Task.Run(() =>
            {
                for (int i = 0; i <= 5000; i++)
                    Console.WriteLine("Test3:" + i);
            });

            Task.WaitAll(T1,T2,T3); // Change here
   }
   s.Stop();
   Console.WriteLine("Press any key to quit");
   Console.WriteLine("Total Task Ellapsed time -> {0}", s.ElapsedMilliseconds);

0
投票

您需要在Task.WaitAll停止之前输入一个Stopwatch(您的代码中的s.Stop()

例如:

Task.WaitAll(T1,T2,T3);
s.Stop();
© www.soinside.com 2019 - 2024. All rights reserved.