Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中主线程和其他线程的基准测试#_C#_Multithreading_Benchmarking_Stopwatch - Fatal编程技术网

C# C中主线程和其他线程的基准测试#

C# C中主线程和其他线程的基准测试#,c#,multithreading,benchmarking,stopwatch,C#,Multithreading,Benchmarking,Stopwatch,我遇到了一个问题,需要演示使用单线程和多线程执行函数的基准测试。 我在这里干什么?如果是,如何在不使用Join()的情况下执行此操作。 如果没有,建议我 代码 class Threading1 { static void Main (string[] args) { Stopwatch timerMain, timerThreads; // Main thread timerMain = Stopwatch.StartNew (); fun

我遇到了一个问题,需要演示使用单线程和多线程执行函数的基准测试。 我在这里干什么?如果是,如何在不使用Join()的情况下执行此操作。 如果没有,建议我

代码

class Threading1 
{
  static void Main (string[] args) 
  {
     Stopwatch timerMain, timerThreads;

     // Main thread 
     timerMain = Stopwatch.StartNew ();
     func1();
     func2();
     func3();
     timerMain.Stop ();
     Console.WriteLine ("Time taken for Main thread: " + timerMain.ElapsedMilliseconds);

     // Other threads
     Thread t1 = new Thread (() => Threading1.func1 ());
     Thread t2 = new Thread (() => Threading1.func2 ());
     Thread t3 = new Thread (() => Threading1.func3 ());
     timerThreads = Stopwatch.StartNew ();
     t1.Start(); t1.Join();
     t2.Start(); t2.Join();
     t3.Start(); t3.Join();
     timerThreads.Stop ();
     Console.WriteLine ("Time taken for Other threads: " + timerThreads.ElapsedMilliseconds);
  }

  // Find maximum value in an array
  static void func1() 
  {
    // Code here. 
  }

  // Find minimum value in an array
  static void func2()
  {
    // Code here. 
  }

  // Find average value of an array
  static void func3()
  {
    // Code here. 
  }
}
输出

Time taken for Main thread: 44
Time taken for other threads: 10
我建议您在所有任务完成后使用和方法等待

timerThreads = Stopwatch.StartNew();
var t1 = Task.Run(() => Threading1.func1());
var t2 = Task.Run(() => Threading1.func2());
var t3 = Task.Run(() => Threading1.func3());

Task.WaitAll(t1, t2, t3);
timerThreads.Stop ();
Console.WriteLine ("Time taken for Other threads: " + timerThreads.ElapsedMilliseconds);

在您的解决方案中没有并行工作,所有线程都是逐个执行的。

我不建议使用
Task.Factory.StartNew
,而是使用
Task.Run
,当您使用
StartNew
而不传入调度程序,
Task时,很容易意外地让东西在UI线程而不是线程池上运行。run
始终使用线程池调度程序。它的工作原理类似于charm.)但我想知道为什么我的代码不能并行工作。线程不是为了实现并行性。感谢您的即时回复。你救了我一天。:)我不能使用线程本身实现结果吗?@NaveenKumarV您的代码不会并行运行,因为您在启动每个线程时都会等待它。如果您坚持使用
Thread
而不是
Task
,请尝试以下操作:
t1.Start();t2.Start();t3.Start();t1.Join();t2.连接();t3.Join()