我注意到我的程序正在使用荒谬(并且不断增加)的内存量,并设法将其缩小到这段代码:
Dim elements As HtmlElementCollection = wb.Document.GetElementsByTagName("div")
For Each ce As HtmlElement In elements
If ce.GetAttribute("hidden") = "false" Then ce.Style = "Display:none"
Marshal.ReleaseComObject(ce.DomElement)
Next
我正在使用它来隐藏WebBrowser控件加载的网页上的某些特定元素。我每次都使用一个新的WebBrowser实例顺序访问很多网页(确保之后再处理它),这意味着上面的代码会经常运行。
在评论之后,内存使用率保持相对较低且不变。但是,只要我重新添加代码,内存使用量就会急剧增加,并且不断增长而不会再次降低。
在对该问题进行一些研究之后,我添加了“Marshal.ReleaseComObject(ce.DomElement)”这一行,虽然稍微有所帮助,但在程序崩溃之前,内存使用量仍会增加。
同样,当我对这段代码进行评论时,一切正常,所以我可以验证问题不是由其他地方的其他疏忽造成的。
有谁知道我可以做些什么来解决这个问题,或者知道我可以使用一些替代方法来完成相同的事情而没有内存问题?
编辑另外,我只想指出使用WebClient是不可能的 - 我需要渲染网页,以便我可以截取屏幕截图。
编辑#2:如果其他人遇到类似问题,我最终会使用JavaScript,效果相同:
wb.Navigate("document.getElementsByClassName('item')[0].setAttribute('style','display:none');")
修复了内存问题。但是,我仍然有兴趣知道为什么原始方法消耗了如此多的内存,以及我将来如何避免这种情况......