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

.NET/C#-执行重复并行任务的有效方法?,c#,.net,wpf,multithreading,C#,.net,Wpf,Multithreading,我需要在.NET3.5/C#/WPF程序中多次执行两个并行任务 在我的例子中,这些任务对设备(Kinect)提供的数据执行一些计算。所以每次收到新数据时,我都需要开始两个任务,进行不同的计算。 我正在为每个任务使用Thread,当我收到新数据时,我用new语句重新创建每个线程 // Data received task1 = new Thread(new ThreadStart(ExtractData1)); task2 = new Thread(new ThreadStart(ExtractD

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

在我的例子中,这些任务对设备(Kinect)提供的数据执行一些计算。所以每次收到新数据时,我都需要开始两个任务,进行不同的计算。 我正在为每个任务使用
Thread
,当我收到新数据时,我用
new
语句重新创建每个线程

// Data received
task1 = new Thread(new ThreadStart(ExtractData1));
task2 = new Thread(new ThreadStart(ExtractData2));
一切正常,但我的问题是效率。 我想知道是否有更好的方法来实现这一点

我应该继续这样使用
线程吗?
每次重新创建
线程
时是否会影响性能? 我是否应该只创建一次
线程
,然后使用
ManualResetEvent
触发计算


提前感谢。

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

除非您的计算是处理器密集型的,否则不要为线程而烦恼


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

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


是启动新线程与使用线程池的比较。真正的总结是,对于运行时间较长的任务(可能需要一两秒钟以上的时间),线程的性能通常更高,而线程池能够回收现有线程,这大大减少了初始开销。

在.NET 4.0+上检查类。它使用
ThreadPool
来管理后台工作,并提供了一个更易于使用的API。询问者使用的是.NET 3.5,它是TPL之前的版本,但是是的,如果TPL可用,它确实可以缓解很多这些问题。谢谢,我将使用
ThreadPool
。。。我也可以切换到.NET 4或4.5,在这种情况下,我应该使用
任务
?(我是否应该编辑我的问题以添加一个.NET 4/4.5部分?@Nems我很高兴答案对你有帮助,一旦你能够:)@Nems-如果你要切换到.NET 4.0或更高版本,
TPL
是一个确定的方法。微软有一个版本的反应式扩展,声称可以“桥接”4.0 TPL的一些功能。也许这对你来说很有趣:谢谢你的建议。我正在考虑现在切换到.NET4/4.5。。。
ThreadPool.QueueUserWorkItem(new WaitCallback(o => ExtractData1()));
ThreadPool.QueueUserWorkItem(new WaitCallback(o => ExtractData2()));