.NET / C# - 执行重复并行任务的有效方法?

时间:2013-11-16 23:55:14

标签: c# .net wpf multithreading

我需要在.NET 3.5 / C#/ WPF程序中多次执行两个并行任务。

在我的情况下,任务对设备提供的数据执行一些计算(Kinect)。因此,每次收到新数据时,我都需要开始执行不同计算的两个任务。 我为每个任务使用Thread,当我收到新数据时,我使用new语句重新创建每个线程。

// Data received
task1 = new Thread(new ThreadStart(ExtractData1));
task2 = new Thread(new ThreadStart(ExtractData2));

一切都正常,但我的问题是关于效率。 我想知道是否有更好的方法来实现这一目标......

我应该像这样继续使用Thread吗? 每次重新创建Thread会有性能影响吗? 我应该只创建一次Thread并使用ManualResetEvent来触发计算吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

每个线程的创建会导致为其堆栈分配大约1MB的内存。那很贵。

除非你的计算是处理器密集型的,否则不要打扰线程。

您最好的选择是对所有三个选项进行基准测试。

答案 1 :(得分:0)

启动一个新的线程会带来一些额外的开销,一个可能的选择是使用ThreadPool

ThreadPool.QueueUserWorkItem(new WaitCallback(o => ExtractData1()));
ThreadPool.QueueUserWorkItem(new WaitCallback(o => ExtractData2()));

Here是开始使用ThreadPool的新线程与比较。真正的总结是,线程通常对于更长时间运行的任务(可能需要超过一秒或两秒)的性能更高,而ThreadPool能够回收现有线程,这减轻了许多初始开销。

相关问题