• Domingo 22 de Diciembre de 2024, 23:16

Autor Tema:  Net Xpider Un Programanita  (Leído 1897 veces)

hitman47

  • Miembro activo
  • **
  • Mensajes: 81
  • Nacionalidad: pa
    • Ver Perfil
    • http://softwareistmenio.blogspot.com
Net Xpider Un Programanita
« en: Lunes 31 de Julio de 2006, 02:33 »
0
¡hola! que tal foristas mi pregunta es la siguiente alguno de ustedes conoce la forma de hacer que los programas en visual basic manejen la memoria bien y no se congelen? lo que pasa es que estoy desarrollando un programa que busca en muchisimos archivos txt sus codigos y los analiza. pero este se tildea cuando son mas de 3 archivos, para minimizarlo demora un monton para moverlo en pantalla tambien etc. al agragarle el doevents a el ciclo mejoro el rendimiento del programa pero no se que mas hacer.  no se si quizas con multithreading mejore. y en q web aprendo a usarlo bien.

salu2!

ArKaNtOs

  • Miembro de PLATA
  • *****
  • Mensajes: 1253
  • Nacionalidad: mx
    • Ver Perfil
Re: Net Xpider Un Programanita
« Respuesta #1 en: Lunes 31 de Julio de 2006, 09:06 »
0
Puedes dejar parte de tu codigo critico plz?, para checar que se le puede optimizar ;)

hitman47

  • Miembro activo
  • **
  • Mensajes: 81
  • Nacionalidad: pa
    • Ver Perfil
    • http://softwareistmenio.blogspot.com
Re: Net Xpider Un Programanita
« Respuesta #2 en: Miércoles 2 de Agosto de 2006, 06:36 »
0
intente subir el archivo adjunto pero no me dejo
este es algo del codigo:
Código: Text
  1.  
  2. Dim sitioweb As String
  3. Dim done As Integer 'sites scanned
  4. Dim halt As Boolean, restart As Boolean
  5.  
  6. Sub Startspider()
  7. 'funcion principal del programa
  8. Dim i As Integer 'index
  9. Dim siteanalisis As String 'string containig the site analisis of adsenses
  10. MsgBox "sites to scan " & List1.ListCount
  11. For i = done To List1.ListCount
  12. DoEvents 'le puse este doevents pa q no c trabe
  13. sitioweb = List1.List(i - 1) 'obtengo un sitio web de la lista cargada
  14. Text2.Text = sitioweb
  15. rtf.Text = OpenURL(sitioweb) 'obtengo el codigo html del sitio web
  16. If halt = True Then 'maneja el pausa de la aplicacion
  17. done = i 'guarda el estado donde queda n pausa
  18. Exit Sub
  19. End If
  20. siteanalisis = analizepage(rtf.Text, i) 'mando ha buscar el numeroc pub del google adsense
  21. If siteanalisis <> "" Then Print #2, siteanalisis
  22. siteanalisis = ""
  23. Label3.Caption = CStr(Format$(i / List1.ListCount * 100, "###.##")) & "%"
  24. 'Call SlowDown(1000)
  25. Next i
  26. Close #2
  27. Text2.Text = "C:\spiderN.txt"
  28. MsgBox "Pub numbers Seaarch finish!", vbInformation
  29. End Sub
  30.  
  31. Function analizepage(ByVal html As String, ByVal i As Integer) As String
  32. Dim s, e As Variant 'position
  33. Dim pub As String 'pub of google adsense
  34. If InStr(html, "google_ad_client = ") > 0 Then
  35. s = InStr(InStr(html, "google_ad_client = "), html, "pub-")
  36. e = InStr(s + 4, html, ";") - 3
  37. pub = "G,"
  38. pub = pub & Mid(html, s + 4, e - s - 2)
  39. pub = pub & "," & List1.List(i - 1)
  40. analizepage = pub
  41. End If
  42. If InStr("yahoo_ad_client = """"pub-", html) Then 'yahhoo
  43. End If
  44. End Function
  45.  
  46. Private Function OpenURL(ByVal sUrl As String) As String
  47. '****************************************************
  48. 'PURPOSE:       Returns Contents (including all HTML) from
  49. '               a web page
  50. 'PARAMETER:     sURL (e.g., http://www33.websamba.com/iglesiadc)
  51. 'RETURN VALUE:  Contents of requested page, or
  52. '               empty string if sURL is not available
  53. 'COMMENTS:  This is an alternative to using the Internet Transfer
  54. '           Control 's OpenURL method.  That control has a bug
  55. '           Whereby not all the contents of the page will be
  56. '           returned in certain circumstances
  57. '*****************************************************
  58.  
  59.     Dim hOpen               As Long
  60.     Dim hOpenUrl            As Long
  61.     Dim bDoLoop             As Boolean
  62.     Dim bRet                As Boolean
  63.     Dim sReadBuffer         As String * 2048
  64.     Dim lNumberOfBytesRead  As Long
  65.     Dim sBuffer             As String
  66.  
  67. hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, _
  68.     vbNullString, vbNullString, 0)
  69.  
  70. hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, _
  71.    INTERNET_FLAG_RELOAD, 0)
  72.  
  73.     bDoLoop = True
  74.     While bDoLoop
  75.     DoEvents 'le puse este doevents pa q no c trabe
  76.         sReadBuffer = vbNullString
  77.         bRet = InternetReadFile(hOpenUrl, sReadBuffer, _
  78.            Len(sReadBuffer), lNumberOfBytesRead)
  79.         sBuffer = sBuffer & Left$(sReadBuffer, _
  80.              lNumberOfBytesRead)
  81.         If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
  82.     Wend
  83.       
  84.     If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
  85.     If hOpen <> 0 Then InternetCloseHandle (hOpen)
  86.     OpenURL = sBuffer
  87.  
  88. End Function
  89.  

la funcion  OpenURL me devuelve el codigo html de un website x en realidad iba a usar el control inet del vb pero tiene un bug q no te devuelve todo el codigo html de una pagina.

a otra cosa si voy a realizar un analizador de html que lea links, mailto, center, font etc. las d+ etiquetas con que es mejor hacerlo. con el DOM MSHTML.DLL o mi propio HTML parser con instr ciclos y demas codigo?gracias salu2!