我更新了代码,用Tasks来代替threads....
根据内存使用和CPU,我没有看到在多核电脑上有任何改进,这是预期的吗?
我的应用程序在运行时基本上会在不同的对象中启动线程/任务...
我所做的只是一个简单的
Task a = new Task(...)
a.Start();
我更新了代码,用Tasks来代替threads....
根据内存使用和CPU,我没有看到在多核电脑上有任何改进,这是预期的吗?
我的应用程序在运行时基本上会在不同的对象中启动线程/任务...
我所做的只是一个简单的
Task a = new Task(...)
a.Start();
使用Tasks而不是Threads有各种含义,但性能并不是主要问题(假设您不会创建大量的线程)。以下是一些关键的区别:
Thread
的使用替换为 Task
,而不做其他更改,我预计几乎会有相同的性能。 Task
API 实际上就是这样一个 API,它是对现有构造的 API。在底层,它使用线程来调度其活动,因此具有类似的性能特征。
Task
的好处在于你可以用它们做新的事情:ContinueWith
进行组合
- 取消任务
- 层次结构
- 等等...Takss与Threads相比的一个很大的改进是,您可以轻松地构建任务链。您可以指定任务在前一个任务之后何时开始(“OnSuccess”,“OnError”等),并且可以指定是否应进行同步上下文切换。这为您提供了在后台运行长时间运行的任务,然后在UI线程上运行UI刷新任务的绝佳机会。
Parallel.Invoke(()=> {
// What ever code you add here will get threaded.
});
欲知详情,请查看http://msdn.microsoft.com/en-us/library/dd992634.aspx
Parallel.Invoke
是用 Tasks
实现的?如果您的原始代码或转换后的代码没有完全利用CPU,那么您将会看到差异。例如,如果原始代码始终将线程数限制为2,在四核机器上,使用手动创建的线程将以约50%的负载运行,并且如果您的任务实际上可以并行化,则可能以100%的负载运行。因此,看起来您的原始代码从性能角度来看是合理的,或者两种实现都存在问题,显示出类似的CPU利用不足。