_INetGetSource oder _IEDocReadHTML?

  • Hallo Leute,

    ich muss ein Programm schreiben, das aus mehreren
    1000 Seiten den Quellcode an einer bestimmten Stelle
    ausliest. Nun ist meine Frage, welches schneller arbeitet,
    mit am besten dem wenigsten Arbeitsspeicher-Verbrauch.

    [autoit]

    _INetGetSource() ;oder
    _IEDocReadHTML()

    [/autoit]


    MfG
    qixx

  • Weder noch.
    _IEBodyReadHTML und _IEDocReadHTML beruhen ja auf dem IE. Der muss die Seite erstmal komplett laden und anzeigen - total unnötig. _InetGetSource, also InetRead und InetGet beruhen, soweit ich das weiß auch auf dem IE, oder nutzen zumindest irgendwelche seiner Librarys. Am schnellsten würdest du mit TCP oder WinHTTP fahren. Ich persönlich würde WinHTTP bevorzugen, weil ich es lieber mag als TCP. Und weil es einfacher ist als TCP. Das ist aber nur meine Meingung - wer TCP mag soll das ruhig nutzen.

    MfG

  • Meine Theorie:
    _InetGetSource geht viel schneller, da bei _IEDocReadHTML die komplette Seite zuerst aufgebaut werden muss. Oder irre ich mich?

  • Bisher habe ich auch _InetGetSource() benutzt.

    @ SEuBo: Was genau meinst du mit WinHTTP oder TCP. Also wie kann ich damit
    die Verbindung herstellen? Habe mal eben in der Hilfe geschaut und nichts diesbezüglich
    gefunden.

    Als Rand-Info: Ich habe keinen FTP-Zugang oder Ähnliches!


    MfG
    qixx

  • Hi,
    ich hab hier mal einen kleinen Speedtest: InetRead vs. WinHTTP

    [autoit]

    #include <Inet.au3>
    $oWinHTTP = ObjCreate("winhttp.winhttprequest.5.1")

    [/autoit][autoit][/autoit][autoit]

    For $x = 0 To 2
    $timer = TimerInit()
    _INetGetSource("http://www.autoit.de")
    ConsoleWrite("_INetGetSource: " & Int(TimerDiff($timer)) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    $timer = TimerInit()
    InetRead("http://www.autoit.de", 1)
    ConsoleWrite("InetRead: " & Int(TimerDiff($timer)) & @CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $timer = TimerInit()
    $oWinHTTP.Open("GET", "http://www.autoit.de", False)
    $oWinHTTP.Send()
    $sHTML = $oWinHTTP.ResponseText
    ConsoleWrite("WinHTTP: " & Int(TimerDiff($timer)) & @CRLF)
    Next

    [/autoit]

    //Edit: auf _inetgetsource erweitert

  • Ich habe das Skript mal etwas erweitert:

    Code
    [autoit]

    #include <Inet.au3>
    $oWinHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $1 = 0
    $2 = 0
    $3 = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $x = 1 To 100
    $timer1 = TimerInit()
    _INetGetSource("http://www.autoit.de")
    $timer1 = Int(TimerDiff($timer1))

    [/autoit] [autoit][/autoit] [autoit]

    $timer2 = TimerInit()
    InetRead("http://www.autoit.de", 1)
    $timer2 = Int(TimerDiff($timer2))

    [/autoit] [autoit][/autoit] [autoit]

    $timer3 = TimerInit()
    $oWinHTTP.Open("GET", "http://www.autoit.de", False)
    $oWinHTTP.Send()
    $sHTML = $oWinHTTP.ResponseText
    $timer3 = Int(TimerDiff($timer3))

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $timer1 < $timer2
    $1 += 1
    Case $timer1 < $timer3
    $1 += 1
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $timer2 < $timer1
    $2 += 1
    Case $timer2 < $timer3
    $2 += 1
    EndSelect

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Select
    Case $timer3 < $timer1
    $3 += 1
    Case $timer3 < $timer2
    $3 += 1
    EndSelect

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Next
    ConsoleWrite("_INetGetSource: " & $1 & " Punkte" & @CRLF)
    ConsoleWrite("InetRead: " & $2 & " Punkte" & @CRLF)
    ConsoleWrite("WinHTTP: " & $3 & " Punkte" & @CRLF)

    [/autoit]

    Bin zu folgendem Ergebnis gekommen:
    _INetGetSource: 66 Punkte
    InetRead: 66 Punkte
    WinHTTP: 65 Punkte

    Alles in allem sind die ab einer bestimmten Menge ungefähr gleich schnell.
    (Getestet mit 100 durchgängen)

    MfG
    qixx