2011-12-26 14 views
0

私はWatiNとdiv要素の非常に大きなリストを反復処理しています(約3000)と、私はエラーを取得していますを修正する方法:WatiNのOutOfMemoryException

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() 

、その後のHTMLを取得DIVをクリックブラウザ。

誰もがメモリの問題を解決する方法を知っていますか?私は別の機能を使用したり、何らかの形でページを分割したりすることができます。あなたがページを待つ際に任意のヘルプ

ため

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 
          { 

おかげでクリス

+0

このコードを含む完全な方法を守ってください。だからあなたは何をしようとしているのか理解できます。例えばd.Click()のコードビハインドがあります。コードロジック – MethodMan

答えて

0

この場合、使用されたメモリ容量が1GBを超えており、おそらく32ビットの.netオブジェクトの制限値に達したため、Internet Explorerに問題がありましたどこかに。

私の場合は、64ビットシステムで実行している場合、問題が「修正」(またはむしろ遅れている)です。

0

まずないユーザスレッドのスリープを実行します。おそらく、私はコードがあるWatiN

以外のものを使用する必要がありますあなたはブラウザを持っています.WaitForComplete()

リンクが特定のページに移動することを確認している場合は、ブラウザのURLを直接確認することができますこれは:browser.Url.Contains( "address")...

+0

ThreadSleep()で終了するには、ChrisがAJAXまたは同様の非同期呼び出しを待機している可能性があることに注意してください。最善の方法ではありませんが、WaitForCompleteはAJAX-Yの読み込みには機能しません。 – OCary

+0

こんにちは、私は、スレッドを必要とするajaxを待っていました。スリープ - 私はこの明確にするために十分なコードを投稿している必要があります – chris

+0

ああ、これを忘れてしまった。 – alonp