用httprequest 试试,WebBrowser 可控性不强,也不方便。

解决方案 »

  1.   

    应该是你那个for循环导致开启的线程太多,导致了系统资源耗尽
      

  2.   


    为什么只能用webbrowser来做,用httprequest做也许要费些力气,但运行效率要强好多
      

  3.   

    是的,确实是这样,那应该怎样不开启太多的线程呢?我也发现了,线程开的数量太多了!求高手怎么修改呢?没必要用线程吧timer会一卡一卡的!
      

  4.   


    感觉你这个可以变通的,用事件委托。
    代码应该有优化空间,另外可以试试 ThreadPool
      

  5.   

    如果你不写 Application.DoEvents(),就能直接解决这类问题。Application.DoEvents()让消息泵无限制地递归调用,很容易让频繁触发动作的系统进入恶性膨胀。你应该真正进行多线程编程,而不要使用 Application.DoEvents()。在vb6以前那个年代(15年前),由于vb根本没有多线程编程概念,才会用 Application.DoEvents() 做一些模拟。但是也要进行 if 判断来防止这种恶性膨胀、递归触发消息的情况。
      

  6.   

    你这里根本没有使用webbrowser的必要,简直就是杀鸡用牛刀,应该使用webrequest去请求你要的url里面的内容,之所以你不愿意这么做,那是因为你不会写请求,不会分析页面里面的javascript。
    每当你调用一次webbrowser,就好比你打开一个IE窗口,一般IE窗口开一个就会占用系统大概50M的内存,特别是包含图片的时候,虽然你获取的字符串里面是没图片,但是webbrowser控件本身要加载图片到内存里,因此占用了很多内存,100个线程就意味着100*50M=5G的内存,你内存有那么大吗?
      

  7.   

    Application.DoEvents()这个是为了等待网页的动态加载,因为这个网页是动态的,不能直接使用request来搞!唉,郁闷
      

  8.   

    request的话,网站会疯狂弹验证码!
      

  9.   


    其实你应该用下抓包工具先分析下数据
    HttpAnalyzerStd ,HttpWatchPro,Fiddler2
    不要用webbrowser控件
    因为这个用久了内存会超多的~
    所以要用httprequest 
      

  10.   

     AddToTextBox(Split_textBox, Querys);这句不断将数据添加到textbox中,会崩掉。不能一直加,必须要加以控制。可以考虑将数据添加到一个池子,比如使用CurrentQueue,然后用另一个Task来读取并显示。数据太多了,得分开显示,比如分页。
      

  11.   

    while (MyBrowser.ReadyState != WebBrowserReadyState.Complete)这句本来就是在线程里的,所以你不写Application.DoEvents()界面也不会卡死。