Как исправить WatiN OutOfMemoryException - PullRequest
0 голосов
/ 26 декабря 2011

Я перебираю очень большой список div с помощью WatiN (около 3000) и получаю сообщение об ошибке:

A first chance exception of type 'System.OutOfMemoryException' occurred in WatiN.Core.dll
System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
   at WatiN.Core.UtilityClasses.UtilityClass.TryFuncFailOver[T](DoFunc`1 func, Int32 numberOfRetries, Int32 sleepTime)
   at WatiN.Core.Native.InternetExplorer.IEElement.GetWithFailOver[T](DoFunc`1 func)
   at WatiN.Core.Native.InternetExplorer.IEElement.GetAttributeValue(String attributeName)
   at WatiN.Core.Element.GetAttributeValueImpl(String attributeName)
   at WatiN.Core.Component.GetAttributeValue(String attributeName)
   at WatiN.Core.Element.get_OuterHtml()
   at WatiN.Core.Document.get_Html()

При нажатии на div и получении HTML-кода браузера.

Кто-нибудь знает, как исправить проблему с памятью?Я надеюсь, что смогу использовать другую функцию или как-то разделить страницу.Возможно, мне нужно будет использовать что-то кроме WatiN

Код:

 foreach (Div d in browser.Divs)
                    {

                        try
                        {
                            d.Click(); // click div

                            System.Threading.Thread.Sleep(250); //wait for new data to load

                            string url = "";
                            if (browser.Html.Contains("http://www.google.com/url?")) // check if an external link exists on the page - this causes the memory exception
                            {

Спасибо за любую помощь

Крис

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

В этом случае это была проблема с Internet Explorer, поскольку объем используемой памяти превышал 1 ГБ и, по-видимому, где-то превышал ограничение 32-битного объекта .net.

В моем случае работа в 64-битной системе «исправила» (или, скорее, отложила) проблему.

0 голосов
/ 26 декабря 2011

Во-первых, не спите пользовательский поток, когда вы ждете страницу, у вас есть браузер. WaitForComplete ()

Если вы проверяете, что ссылка выводит вас на определенную страницу, вы можете проверить непосредственно URL-адрес браузера следующим образом: browser.Url.Contains ("address") ...

...