Click here to Skip to main content
15,899,679 members

Comments by AllenBerg (Top 4 by date)

AllenBerg 7-Mar-13 12:02pm View    
it appears that i am still leaking memory... does anyone see any issues with my vb.net code? am i interpreting the origial author correctly in my usage?

most of the 'code' here is actualy just assigning the javascript to a string... but that was copied off this site
AllenBerg 6-Mar-13 13:47pm View    
I tried to implement this in my vb.net scraper app - i call the following code before nevagition to a new page, with the hopes that it will fix the memory leaks of the previous page.

code:



Public Shared Sub Clean_JS(ByRef wb As System.Windows.Forms.WebBrowser)

Dim args As Object() = {"document.body"}

Dim head As HtmlElement = wb.Document.GetElementsByTagName("head")(0)

Dim scriptEl0 As HtmlElement = wb.Document.CreateElement("script")
Dim element0 As mshtml.IHTMLScriptElement = DirectCast(scriptEl0.DomElement, mshtml.IHTMLScriptElement)
element0.text = "function ReleaseHandler() {" + vbCrLf + " var EvtMgr = (function() {" + vbCrLf + " var listenerMap = {};" + vbCrLf + " " + vbCrLf + " // Public interface" + vbCrLf + " return {" + vbCrLf + " addListener: function(evtName, node, handler) {" + vbCrLf + " node[""on"" + evtName] = handler;" + vbCrLf + " var eventList = listenerMap[evtName];" + vbCrLf + " if (!eventList) {" + vbCrLf + " eventList = listenerMap[evtName] = [];" + vbCrLf + " }" + vbCrLf + " eventList.push(node);" + vbCrLf + " }," + vbCrLf + " " + vbCrLf + " removeAllListeners: function() {" + vbCrLf + " for (var evtName in listenerMap) {" + vbCrLf + " var nodeList = listenerMap[evtName];" + vbCrLf + " for (var i = 0, node; node = nodeList[i]; i++) {" + vbCrLf + " node[""on"" + evtName] = null;" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " })();" + vbCrLf + " }"
head.AppendChild(scriptEl0)

Dim scriptEl1 As HtmlElement = wb.Document.CreateElement("script")
Dim element1 As mshtml.IHTMLScriptElement = DirectCast(scriptEl1.DomElement, mshtml.IHTMLScriptElement)
element1.text = "function ReleaseHandler() {" + vbCrLf + " var EvtMgr = (function() {" + vbCrLf + " var listenerMap = {};" + vbCrLf + " " + vbCrLf + " // Public interface" + vbCrLf + " return {" + vbCrLf + " addListener: function(evtName, node, handler) {" + vbCrLf + " node[""on"" + evtName] = handler;" + vbCrLf + " var eventList = listenerMap[evtName];" + vbCrLf + " if (!eventList) {" + vbCrLf + " eventList = listenerMap[evtName] = [];" + vbCrLf + " }" + vbCrLf + " eventList.push(node);" + vbCrLf + " }," + vbCrLf + " " + vbCrLf + " removeAllListeners: function() {" + vbCrLf + " for (var evtName in listenerMap) {" + vbCrLf + " var nodeList = listenerMap[evtName];" + vbCrLf + " for (var i = 0, node; node = nodeList[i]; i++) {" + vbCrLf + " node[""on"" + evtName] = null;" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " }" + vbCrLf + " })();" + vbCrLf + " }"
head.AppendChild(scriptEl1)

wb.Document.InvokeScript("ReleaseHandler")
wb.Document.InvokeScript("purge", args)


End Sub
AllenBerg 6-Mar-13 9:09am View    
Deleted
Ok, so apparently I am dumb and this is javascript and not c#. I assume that i will need to inject this into the page before navigationg away from it, and then run it somehow.

Looking into this now...
AllenBerg 4-Mar-13 14:23pm View    
Deleted
any chance of getting this converted into vb.net?

i need to use the webbrowser controls to scrape some web pages, but some of them have bad JS, and i do not have the option of fixing the sites...





i tried to convert it myself, but i dont understand the whole listener/interface thing...

i also tried some of the automated c# to vb.net converters on the internet, but none of them were working for this code... i have used them successfully for other code.



any help would be greatly appreciated. i have been battling this memory leak for weeks now, without much progress.




P.S.
I used debugdiag to analaze the memory leak. It was occouring in unmanaged memory.
It does indeed appear to be related to bad javascript:





Collapse | Copy Code
jscript.dll is responsible for 1.10 GBytes worth of outstanding allocations. The following are the top 2 memory consuming functions:

jscript!Parser::GenerateCode+167: 498.19 MBytes worth of outstanding allocations.

jscript!NoRelAlloc::PvAlloc+96: 292.99 MBytes worth of outstanding allocations.