【发布时间】:2011-01-13 11:39:42
【问题描述】:
我有 15 个一直在运行的 BackgroundWorer,每个都工作大约半秒(发出 Web 请求)并且它们都没有停止过。
我注意到我的程序占用了我计算机大约 80% 的处理资源和大约 15mb 的内存(core 2 duo,4gb ddr2 memory)。
正常吗? Web 请求并不繁重,它只是发送并等待服务器响应,是的,运行其中的 15 个确实不是一个有利于性能的行为(需要速度),但我不认为它会如此紧张。
我是编程新手,我几乎从来没有(就像我认为的任何新程序员一样)关心性能,但这次很荒谬,80% 的处理资源使用用于具有两个列表框和后台工作程序的 Windows 窗体应用程序发出网络请求并不符合预期。
信息:
- 我在日常工作中使用异常处理,我曾经读过这对性能并不好
- 我有 15 个后台工作人员
- 我的代码确保它们都不会闲置
- 列表项
- windows 窗体、visual studio、c#。
-----[编辑 - 答案中的问题]------
“我的代码确保它们都不会闲置”到底是什么意思?
程序仍在等待
while (bgw1.IsBusy || gbw2.IsBusy ... ... ...) { Application.DoWork();}
然后当他们中的任何一个有空时,就会重新开始工作。
您能否详细说明您为此承担的工作量?
我创建了一个 HTTP Web 请求对象,打开它并等待服务器请求。它真的只有几行,没有繁重的处理,半秒是由于服务器等待。
以什么方式,有多少异常被抛出? 当页面不存在时,有一个 system.WebException,当它工作时它返回“OK”,并且我检查的大约 99% 的页面不存在,所以我会说每分钟大约 300 个异常(放置我知道,这样听起来让人毛骨悚然,但它确实有效)
如果您在调试器中运行,那么异常会比不调试时的代价高得多 我不是在谈论在调试器中运行它,我运行的是可执行文件,即生成的 EXE。
【问题讨论】:
标签: visual-studio winforms performance multithreading backgroundworker