Csharp/C#教程:线程/线程池或后台工作者分享


线程/线程池或后台工作者

我想知道什么用于需要很多性能的任务。 BackgroundworkerThread还是ThreadPool

到目前为止,我一直在使用Threads,但我需要提高应用程序的速度。

BackgroundWorker与线程池线程相同。 它增加了在UI线程上运行事件的能力。 显示进度以及使用结果更新UI非常有用。 因此,它的典型用法是在需要完成工作时防止UI冻结。 性能不是第一个目标, 异步运行代码是。 在后来的.NET版本中,Task <>类和async / await关键字也可以很好地扩展此模式。

线程池线程有助于避免消耗资源。 线程是一个昂贵的操作系统对象,您可以创建非常有限的数量。 一个线程需要5个操作系统句柄和1兆字节的虚拟内存地址空间。 没有Dispose()方法可以尽早释放这些句柄。 线程池主要用于重用线程并确保它们中没有太多是活动的。 重要的是,只有当它所做的工作有限时才使用线程池线程,理想情况下不要超过半秒。 而不是经常阻止。 因此,它最适合短时间的工作,而不是性能重要的任何事情。 处理I / O完成是TP线程的理想任务。

是的,也可以使用线程来提高程序的性能。 您可以使用Thread或使用TaskContinuationOptions.LongRunning的Task <>来实现。 实际上有一些硬性要求可以实现性能提升,它们非常僵硬:

在线程中启动CPU密集型任务的框架与您的问题无关,除非您有过于小粒度的子任务。

您需要将工作拆分为可以在有多个CPU的情况下并行执行的子任务。

这个选择并不重要。 BackgroundWorker是一个ThreadPool线程,所以无论如何都没有区别。 但是,您可以尝试使用ThreadPool.SetMaxThreads优化线程数。

您可能希望使用System.Threading.Task类,它可以帮助优化并行执行。

上述就是C#学习教程:线程/线程池或后台工作者分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/990043.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐