首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多线程会加快我的HTML文件处理应用程序吗?

使用多线程会加快我的HTML文件处理应用程序吗?
EN

Stack Overflow用户
提问于 2011-06-08 14:02:16
回答 5查看 243关注 0票数 3

我刚刚完成了迄今为止最复杂和功能最丰富的WinForms应用程序。它加载一个列表(任意数量的HTML文件),然后加载一个文件的内容,使用一些RegEx匹配一些标记并删除或替换它们(是的,是的,我见过 )。非常好,谢谢Cthulu),然后把它写到磁盘上。

然而,我注意到大约200个文件需要大约30秒的时间来处理,在前5-10秒之后,程序被报告为“没有响应”。我认为这样做是不明智的,因为硬盘驱动器是一个瓶颈。

也许可以将尽可能多的内容加载到内存中,然后用线程处理每个线程,编写这些线程,然后再将更多的线程加载到内存中?

至少,创建一个与UI线程分离的工作线程是否可以防止“未响应”问题?(这篇MSDN文章涵盖了我正在考虑的内容。)

我想我是在问多线程是否能提高速度,如果是的话,最好的方法是什么呢?

任何帮助或建议都是非常感谢的!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-08 14:08:59

是的,您应该首先使用背景工作者将您的工作与GUI分离开来。处理GUI事件不应该花费太多时间。目标是20毫秒,而不是20毫秒。

然后,作为奖励,您可以看到处理(CPU密集型部分)是否可以分割成独立的作业,并作为TPL任务执行它们。

没有足够的信息来说明你是否应该或者如何去做。

票数 3
EN

Stack Overflow用户

发布于 2011-06-08 14:08:56

在大多数情况下,线程作业、任务等将防止主线程或主线程变得没有响应性。不要为磁盘IO创建多个线程(很明显)。我会将单个工作线程用于从队列中取出文件并处理磁盘IO。否则,一个或两个工作线程进行内存中的处理应该是足够的,而您的主线程可以保持响应。

票数 2
EN

Stack Overflow用户

发布于 2011-06-08 14:11:55

首先,如果您希望程序保持响应性,请将计算移到单独的线程(从UI线程中删除它)。

实际性能的提高取决于您拥有的处理器数量,而不是线程数。

因此,如果您有P线程,则可以将工作划分为P工作项,并获得一些工作改进。(Amdahl定律)

您可以使用BackgroundWorker正确地划分工作。:C# BackgroundWorker教程

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

https://stackoverflow.com/questions/6279948

复制
相关文章

相似问题

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