2010-03-04 9 views
5

Estoy usando Watin en la aplicación de consola C# para rastrear sitios web, hay cinco aplicaciones de consola ejecutándose al mismo tiempo. La razón por la que utilizo parcialmente Watin como rastreador es porque algunos sitios web usan javascript (o ajax) para establecer el contenido de la página.Gran uso de Watin, problema IE permanecer abierto

siguiente es el código de ejemplo para obtener una página de comentarios recuento:

 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; 
       } 
      } 
     } 

Mi problema es después de ejecutar estas aplicaciones 5 de la consola por un tiempo (90 min), una gran cantidad de casos de IE se mantuvo abierta (porque de tiempo de espera o error o IE está ocupado), por lo que el sistema es bastante lento y debe reiniciarse.

¿Cómo cambio mi código para evitar que esto suceda y hacer que mis aplicaciones se mantengan eficientes?

Respuesta

7

Creo que en el código de muestra hay solo un momento, cuando IE no estará cerca. Dado que se encuentra dentro de using, incluso si se produce una excepción dentro de ese using, el navegador se eliminará, por lo que todo está bien.

Pero en el momento de la creación del navegador:

new IE(commentLink, true) 

que no están en el interior using, y no hay magia try...catch. Pruebe esto, y avíseme si fue de ayuda:

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; 
     } 
    } 
}