首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TaskFactory.StartNew对ThreadPool.QueueUserWorkItem

TaskFactory.StartNew对ThreadPool.QueueUserWorkItem
EN

Stack Overflow用户
提问于 2010-06-15 16:50:00
回答 3查看 8.7K关注 0票数 25

显然,TaskFactory.StartNew方法在.NET 4.0中是用来替代ThreadPool.QueueUserWorkItem (根据这篇文章,无论如何)的。我的问题很简单:有人知道为什么吗?

TaskFactory.StartNew有更好的性能吗?它用的内存少吗?还是主要用于Task类提供的附加功能?在后一种情况下,StartNew的性能可能比QueueUserWorkItem差吗?

在我看来,StartNew实际上比QueueUserWorkItem使用更多的内存,因为它每次调用都会返回一个Task对象,我希望这会导致更多的内存分配。

无论如何,我想知道哪一个更适合于高性能的场景。

EN

回答 3

Stack Overflow用户

发布于 2010-06-15 17:15:01

表演是..。视情况而定。如果您正在执行许多并行任务,那么.net 4任务将执行得更好,并给您更细粒度的控制(更健壮的取消、同时等待多个任务的能力、创建父/子任务关系的能力、指定LongRunning的能力等等)。等等。(等等)

此外,指定您自己的TaskScheduler的能力意味着您可以根据您的需要定制它。内置的任务调度程序比旧的ThreadPool更具有多核感知能力。

至于使用更多的内存。每个线程至少保留1MB的内存,用于存储任务对象的少量内存是不重要的。我真的认为这是你最后的担忧。

票数 7
EN

Stack Overflow用户

发布于 2010-06-22 06:50:41

TaskFactory.StartNew更适合于高性能场景。

通过System.Threading.Tasks中的类集以及它们的设计+与并行循环和选项的集成,您可以获得更高的效率。

您还将获得性能上的好处,因为System.Threading.Tasks构建在线程池中的工作之上,这对本地性更好(在重要的情况下)。

-Rick

票数 6
EN

Stack Overflow用户

发布于 2010-06-15 17:06:33

从外观上看,task是为了处理.Net 4中的新并行特性而设计的。在启动/创建任务时,您还可以直接使用ActionAction<T>。不过,这都是100%的猜测,是基于对docs的浏览:)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3047268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档