我在this link的帮助下创建了一个BHO应用程序。
如果我构建上面文章中获得的源代码,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使用率?
答案 0 :(得分: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语句的替代答案。
答案 1 :(得分:0)
重复生成此事件。如何降低CPU使用率?
根据onProgressChange
实施情况,可以非常快速地调用函数webBrowser
。
尝试重写onProgressChange
以跳过其中的一些电话并偶尔进行实际工作,例如每秒一次。