【发布时间】:2009-01-07 06:34:53
【问题描述】:
我在 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 使用率?
【问题讨论】:
-
要真正找到瓶颈,请使用分析器工具并查看最需要时间的地方。但是正如 csharptest.net 已经指出的那样,最大的问题是您会一遍又一遍地运行一堆元素。
-
修复了你的代码标记,我发现了一些错误:在 SetSite 的 else 块中设置 processchange 事件处理程序而不是添加一个(参见 if 块。第二个错误是 SetSite 中的返回 0。如果它没有function 使函数返回 void
标签: c# internet-explorer plugins bho