Performance Probleme mit Geocoding API

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Fluffing.

    Performance Probleme mit Geocoding API

    Hallo, ich habe ein kleines Problem mit einer API Abfrage. Ich möchte für einen Fahrzeugvorschlag für eine Adresse, die Fahrzeuge vorgeschlagen bekommen, welche am nächsten zur Adresse sind. Das funktioniert soweit auch gut! Allerdings lädt die Abfrage bei 10 Abfragen allerdings 5 Sekunden und dabei hängt es sich auch auf. Das dauert mir allerdings zu lange? Kann ich an meinen Code irgendwas anpassen, damit das für viele Fahrzeuge schnell abgefragt wird?

    VB.NET-Quellcode

    1. Private Sub fahrzeugVorschlagBtn_Click(sender As Object, e As EventArgs) Handles fahrzeugVorschlagBtn.Click
    2. Dim fileInhalt As New TextBox
    3. fileInhalt.Text = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Fahrzeuge\RTW.txt").ToString
    4. Dim linint As Integer = 0
    5. Dim myReq As HttpWebRequest
    6. For Each line As String In fileInhalt.Lines
    7. Dim splitter() = line.Split("§")
    8. Dim name As String = splitter(0)
    9. myReq = DirectCast(WebRequest.Create("http://www.mapquestapi.com/directions/v2/route?key=KEY&from=" + splitter(1).Replace("|", "+") + "&to=" + TextBox1.Text + "&outFormat=xml&ambiguities=ignore&routeType=shortest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false"), HttpWebRequest)
    10. Dim webResponse As HttpWebResponse = Nothing
    11. Try
    12. webResponse = TryCast(myReq.GetResponse(), HttpWebResponse)
    13. If webResponse IsNot Nothing Then
    14. If webResponse.StatusCode = HttpStatusCode.OK Then
    15. Dim doc As New System.Xml.XmlDocument()
    16. doc.Load(webResponse.GetResponseStream())
    17. If doc IsNot Nothing Then
    18. Dim geometry As System.Xml.XmlNode = doc.SelectSingleNode("response/route")
    19. If geometry IsNot Nothing Then
    20. Try
    21. With DataGridView1
    22. .Rows.Add(geometry.SelectSingleNode("distance").InnerXml)
    23. .Rows(linint).Cells(1).Value = splitter(0)
    24. End With
    25. Catch ex As Exception
    26. End Try
    27. Else
    28. MessageBox.Show("Nein")
    29. End If
    30. End If
    31. End If
    32. End If
    33. Catch ex As Exception
    34. End Try
    35. linint += 1
    36. Next
    37. DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
    38. MessageBox.Show(DataGridView1(1, 0).Value.ToString)
    39. End Sub


    Nur um die Distanz zwischen zwei Orten zu ermitteln, lässt du den Server die ganze Route mit allen Kreuzungspunkten berechnen und ausgeben.
    Das ist ein ziemlich großer Overhead.
    Da ist allein die vom Server benötigte Zeit zwischen 0,2 und 5 Sekunden, je nachdem, was du als Start und Ziel eingibst.
    Dein Navi im Auto ist langsamer.
    Da kannst du im Code nicht mehr viel optimieren.

    Eine reine Distance Funktion habe ich bei MapQuest nicht gefunden.
    Du kannst ja mal Googles Distance Matrix API testen, ob das schneller geht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wenn man die IF Prüfungen nicht so unfassbar tief verschachtelt, wird der Code deutlich lesbarer.

    z.b.
    If (false) Then Exit sub
    If (false) Then Continue for
    etc.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Danke für die schnelle Antwort.
    Das macht natürlich Sinn. Google kostet dann allerdings Geld, wenn man Ausversehen über das Limit kommt. Das ist eher unschön.
    Ich schaue mich mal nach Alternativen um.

    Aber vielleicht hat ja noch jemand eine Idee.

    Wenn man die IF Prüfungen nicht so unfassbar tief verschachtelt, wird der Code deutlich lesbarer.z.b.If (false) Then Exit subIf (false) Then Continue foretc.​


    Dadurch wird ja die Abfrage nicht schneller