use*_*035 5 c# performance multithreading backgroundworker threadpool
我想知道什么用于需要很多性能的任务.
Backgroundworker,Thread还是ThreadPool?
到目前为止,我一直在使用Threads,但我需要提高应用程序的速度.
Han*_*ant 13
BackgroundWorker与线程池线程相同.它增加了在UI线程上运行事件的功能.显示进度以及使用结果更新UI非常有用.因此,它的典型用法是在需要完成工作时防止UI冻结.性能不是第一个目标,异步运行代码是.在后来的.NET版本中,Task <>类和async/await关键字也可以很好地扩展此模式.
线程池线程对于避免消耗资源很有用.线程是一个昂贵的操作系统对象,您可以创建非常有限的数量.一个线程需要5个操作系统句柄和1兆字节的虚拟内存地址空间.没有Dispose()方法可以尽早释放这些句柄.线程池主要用于重用线程并确保它们中没有太多是活动的.重要的是,只有当它所做的工作有限时才使用线程池线程,理想情况下不要超过半秒.而不是经常阻止.因此,它最适合短时间的工作,而不是性能重要的任何事情.处理I/O完成是TP线程的理想任务.
是的,也可以使用线程来提高程序的性能.您可以使用Thread或使用TaskContinuationOptions.LongRunning的Task <>来完成此操作.实际上有一些硬性要求可以实现性能提升,它们非常僵硬: