显然,.NET 4.0中的 TaskFactory.StartNew
方法旨在替代 ThreadPool.QueueUserWorkItem
(according to this post, anyway)。我的问题很简单:有人知道为什么吗?TaskFactory.StartNew
是否有更好的性能?它使用更少的内存吗?还是主要用于Task
类提供的其他功能?在后一种情况下,StartNew
的性能是否可能比QueueUserWorkItem
差?
在我看来,StartNew
实际上可能比QueueUserWorkItem
占用更多的内存,因为它每次调用都会返回一个Task
对象,我希望这样做会导致更多的内存分配。
无论如何,我很想知道哪种更适合高性能方案。
最佳答案
性能取决于……。如果您要执行许多并行任务,那么.net 4任务将执行得更好,并且为您提供更细粒度的控制(更强大的取消功能,同时等待多个任务的能力,创建父/子任务关系的能力,指定LongRunning,等等。等等。等等。)
此外,可以指定自己的TaskScheduler的功能意味着您可以根据需要自定义它。内置的任务计划程序比旧的ThreadPool更了解多核。
至于使用更多的内存。每个线程至少保留1MB的内存,用于存储任务对象的微小内存是无关紧要的。我真的认为这是您最后的担心。