2014-11-19 3 views
-1

Я пытаюсь сохранить HTML-страницу с помощью C# webBrowserSaving outerHTML вызвать System.OutOfMemoryException

var doc = webBrowser1.Document.DomDocument as mshtml.HTMLDocument; 
string s1 = doc.documentElement.outerHTML; 

И я получаю это исключение:

An unhandled exception of type 'System.OutOfMemoryException' occurred in texas project.exe 

Additional information: Could not get the outerHTML property. Not enough storage is available to complete this operation. 

Почему в разных прогонах я получаю это несколько раз ? и как сохранить страницу без этого исключения?

ответ

0

В разных прогонах у вас есть другое использование виртуальной памяти, поэтому именно поэтому приложение выходит из памяти только в определенных случаях. Чтобы узнать, что именно заставляет приложение преодолевать ограничение, я бы предложил профилирование с хорошим профилировщиком памяти. Возможно, в вашем приложении есть что-то еще, что вызывает утечку памяти и вызывает проблему.

Доступ к документу через API DomDocument может быть ненужным, если единственная цель - получить строку документа, а не перемещаться по документу.

Я предложил бы использовать WebBrowser.DocumentText свойство, чтобы получить весь документ в виде строки:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documenttext%28v=vs.110%29.aspx

Существует также WebBrowser.DocumentStream свойства в случае, если вы хотите прочитать документ в кусках, отправить его по сети как поток и т.д.:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentstream%28v=vs.110%29.aspx

+0

в чем разница между '' DomDocument' и DocumentText'? –

+1

DomDocument - это неуправляемый объект, содержащий сложный API для доступа, перемещения и управления DOM текущей веб-страницы, загруженной в объект браузера. С другой стороны DocumentText - это простое и сухое строковое свойство, содержащее текстовое представление (строка HTML) текущей страницы. –