0

在此链接的帮助下,我创建了一个 BHO 应用程序。

如果我 Build 上面文章中得到的源代码,CPU 使用率提高到 70-80%。

我怎样才能减少这种情况?

在上面的文章中,我使用了 progresschange 事件处理程序,而不是 Document complete 事件处理程序。

在 foreach 循环中,我曾经检查网页的每个标签的标签名,在构建上述代码时(或在注册 dll 之后),CPU 使用率从 10% 到 80% 持续增加,如果有可能会导致问题是包含大量数据(元素)的网页.....

我想避免这种情况,是否有任何方法可以让我获取网页中存在的所有标签的所有标签名。请提出一些建议,以便我可以避免这个问题。谢谢...导致问题的代码是粗体字符。对于找到的每个标记元素,它都显示包含标记元素标记名的消息框。

我遇到问题的代码是:

public void onProgressChange(int Progress, int ProgressMax) 
{    
    document = (HTMLDocument)webBrowser.Document; 
    foreach(IHTMLElement tempElement in (IHTMLElementCollection)document.documentElement.all)   
    {      
        System.Windows.Forms.MessageBox.Show(" Tagname:"+ tempElement.tagname);   
    }                 
}

public int SetSite(object site) 
{
    if (site != null)   
    {     
        webBrowser = (WebBrowser)site; 
        webBrowser.ProgressChange += new DWebBrowserEvents2_ProgressChangeEventHandler(this.onProgressChange);    
    }    
    else    
    { 
        webBrowser.ProgressChange = new DWebBrowserEvents2_ProgressChangeEventHandler(this.onProgressChange);
        webBrowser = null;     
    }

    return 0;
}

此事件重复生成。如何降低 CPU 使用率?

4

2 回答 2

0

这是一个没有答案的问题。您的 CPU 使用问题是您所做的事情的结果,而不是如何操作的结果。IE 是一条狗,尤其是如果你走的所有集合。请记住,必须将每个对象编组到 .Net 中才能访问它。我建议您以另一种方式解决您的问题,或者使用 IE 以外的解析器来处理 HTML。您可以使用 WebClient 类加载 HTML,然后将结果提供给您喜欢的任何解析器。运行一个简单的谷歌搜索将出现几个替代解析器:

http://www.google.com/search?hl=en&rlz=1C1GGLS_enUS330US330&q=html+parser+C%23+.net&aq=f&oq=&aqi=

如果出于某种原因您坚持使用 IE,您需要在 document.all 集合上找到 foreach 语句的替代答案。

于 2009-08-28T02:16:51.000 回答
0

此事件重复生成。如何降低 CPU 使用率?

根据实现,函数onProgressChange可能会被非常非常快地调用webBrowser

尝试重写onProgressChange以跳过它的一些调用并偶尔做一次实际工作,例如每秒一次。

于 2015-12-04T19:33:01.347 回答