接手一个项目,要把程序优化一下,使运行速度提高4倍左右.( 感觉有难度,可能完成不了).已有程序是这样的,通过IE组件接口来抓取Web页面的元素.再将这些元素处理一下,提取出感兴趣的数据,写入一个新的Web页面中.现在它是单线程依次抓取多个web页面,速度很慢,3个复杂一点的页面要25秒左右. 考虑用多线程,可是在单CPU下效果不明显. 
我再将各个用CString的地方都用string来代替,大概能提高1秒, 将十几个for循环处理放入一个for中去,大概能提高0.5秒. 总之效果很不理想.限于硬件条件,我不能在多CPU环境下去测试. 现在我想问一下,如果在多CPU环境下,比如4个子线程在4颗CPU环境下,总的速度大概能提高多少?谁能提一些理论上可行的办法么? 以前没做过优化方面的事情,请有经验的师兄们指点指点呀.

解决方案 »

  1.   

    1)可以自己用 http 请求抓页面,比 IE 快多了。
    2) 多线程肯定可以提高速度,因为服务器返回页面需要时间,收页面的线程记得有空就 Sleep 一下。PS: 页面解析要用几十个 for ?
      

  2.   

    1)可以自己用 http 请求抓页面,比 IE 快多了
    ---
    这个不行吧? 程序原作者说他做过试验,发现这样会慢一些.有朋友提出用汇编,不知道汇编在提高速度方面效果明显不明显呢?
      

  3.   

    用HTTP会慢?直接取源文件分析应该不慢吧?IE毕竟要带图片啊。
    我用java写过webgame的挂机程序,比别人用vb用IE控件的要快上很多。
    朋友用vc的一个新的IE的开发包比我的又快很多,他的也是分析源文件的。
      

  4.   

    我这个是IE的COM,用的都是接口函数,应该速度会比较快,以前有一个JAVA版的,NND,真不知道瓶颈在哪里了
    谢谢大家讨论,看来得好好改造一下它的数据结构
      

  5.   

    to 我再将各个用CString的地方都用string来代替,大概能提高1秒, 用StringBuilder代替stringto 将十几个for循环处理放入一个for中去,大概能提高0.5秒. 总之效果很不理想.合并for循环不一定提升速度,从算法的细节入手会有好的收益。
      

  6.   

    to 限于硬件条件,我不能在多CPU环境下去测试. 现在我想问一下,如果在多CPU环境下,比如4个子线程在4颗CPU环境下,总的速度大概能提高多少?目前你主要先分析出目前的瓶颈在哪儿,按照抓取网页,然后分析出有用的内容,造成瓶颈的可能大致有两点:
    1、是网络数据传输;
    2、是内容分析;如果前者造成比较大的瓶颈,多cpu对效率来说提升并不会很大;
    如果是后者的话,多cpu会有明显的改善。