2010-03-04 2 views
5

Sto utilizzando Watin nell'app console C# per eseguire la scansione dei siti Web, ci sono cinque app per console in esecuzione contemporaneamente. Il motivo per cui utilizzo in parte Watin come crawler è perché alcuni siti Web utilizzano javascript (o ajax) per impostare il contenuto della pagina.Uso intensivo di Watin, IE stay open problem

seguito è il codice di esempio per ottenere una pagina di commento conteggio:

 Settings.Instance.MakeNewIeInstanceVisible = false; 
     using (var browser = new IE(commentLink, true)) 
     { 
      browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20); 

      Span commentSpan = browser.Span("COUNT_TOTAL"); 

      if (commentSpan.Exists) 
      { 
       int commentCount; 
       if (Int32.TryParse(commentSpan.InnerHtml, out commentCount)) 
       { 
        return commentCount; 
       } 
      } 
     } 

Il mio problema è dopo aver eseguito queste app 5 console per un po '(90 min), un sacco di istanze di IE sono stati aperti (a causa di timeout o errore o IE è occupato), quindi il sistema è piuttosto lento e deve essere riavviato.

Come cambio il mio codice per evitare che ciò accada e rendere le mie app sempre efficienti?

risposta

7

Penso che nel codice di esempio ci sia solo un momento, quando IE non sarà vicino. Dato che ci si trova all'interno di using, anche se si verifica un'eccezione all'interno di tale using, il browser verrà eliminato, quindi tutto è a posto.

Ma nel momento della creazione del browser:

new IE(commentLink, true) 

non si è all'interno using, e non c'è nessuna magia try...catch. Prova questo e fammi sapere se è stato utile:

Settings.Instance.MakeNewIeInstanceVisible = false; 
using (var browser = new IE(true)) 
{ 
    browser.GoTo(commentLink); 

    browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20); 

    Span commentSpan = browser.Span("COUNT_TOTAL"); 

    if (commentSpan.Exists) 
    { 
     int commentCount; 
     if (Int32.TryParse(commentSpan.InnerHtml, out commentCount)) 
     { 
      return commentCount; 
     } 
    } 
}