Parallele Webclients/Webrequests langsam/bremsen sich aus

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von super95.

    Parallele Webclients/Webrequests langsam/bremsen sich aus

    Ich habe ein Programm, das automatisiert per Webclient POST Anfragen versendet. An sich funktioniert das auch alles einwandfrei.
    Das Problem ist nun: wenn ich das Programm mehrmals mit verschiedenen IP Adressen starte (.exe einfach mehrmals kopiert), werden die Anfragen immer langsamer, so als ob sie sich gegenseitig blockieren bzw ausbrmesen. Läuft nur ein Programm, braucht es maximal 2 Sekunden, bei 4 schon jeweils 8 Sekunden.

    Ursprünglich hatte ich das ganze mit Webrequests statt Webclient realisiert. Das hat dazu geführt, dass sehr viele Verbindungen gab, da das Webrequest immer wieder neu deklariert wurde. Deswegen dachte ich es liegt evtl daran, dass es zu viele offene Ports gibt, die blockiert aber nciht mehr genutzt werden.
    Nachdem ich nun Webclients verwende und diese nur ein mal zu Beginn der Anwendung deklariert habe und dann immer wieder verwende, tritt das Problem mit den vielen geöffneten Verbindungen zwar nicht mehr auf, doch das mit der Geschwindigkeit eben immer noch.

    An der CPU und RAM Auslastung kann es nicht liegen, genau so wie an der Internetverbindung (es werden nur wenige KB übertragen)

    Woran liegt das? Ist das evtl ein bekanntes Problem?
    Hi,

    wie meinst Du mit verschiedenen IP-Adressen starten? An welchen Service sendest Du denn die POST-Requests? Kann sein, dass dieser einfach langsamer reagiert, wenn gehäuft anfragen auftreten. Wie genau parallelisierst Du die Requests? Ist es überhaupt notwendig, mehrere parallele Requests zu senden?

    Wie Du siehst, viele Fragen, die Du eigentlich gleich beim Eingangspost hättest beantworten können. So kann man Dir nur schwer helfen. Am besten, Du lieferst alle Informationen, damit der "Helfer" die Sache nachstellen kann.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Willkommen im Forum. :thumbup:

    super95 schrieb:

    wenn ich das Programm mehrmals mit verschiedenen IP Adressen starte
    Du solltest das ganze in einer einzigen Programminstanz lösen.
    Kannst Du mal Deine Herangehensweise detailliert beschreiben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wie meinst Du mit verschiedenen IP-Adressen starten?

    Über einen Proxy

    ​Wie genau parallelisierst Du die Requests?

    Wie gesagt: ich starte das Programm einfach mehrmals

    Kann sein, dass dieser einfach langsamer reagiert, wenn gehäuft anfragen auftreten.

    Am Server liegt es nicht. Wenn ich meinen Laptop über mein Handy als mobilen Hotspot mit dem Internet verbinde während mein PC "ganz normal" über den Router online ist und auf beiden das Programm läuft tritt das Problem ebenfalls nicht auf. Wenn der Laptop jedoch ebenfalls über den Router online ist werden beide langsamer.

    ​Du solltest das ganze in einer einzigen Programminstanz lösen.

    Ich habe nun aus meinem ursprünglichen Programm eine Klasse erstellt, aus der ich dann mehrere Objekte erstelle, sodass das ganze in nur noch einer Programminstanz läuft. Das Problem bleibt bestehen.
    Auch wenn du über einen Proxy Lädst, muss alles an Datenverkehr erstmal über deine Breitbandleitung zum Proxy und von da aus weiter geleitet werden. Und dein Heimanschluss hat nunmal eine begrenzte Bandbreite, z.B. 16 Mbit/s. Unter der Annahme, dass der Server die vollen 16Mbit/s liefern kann, ist schlichtweg nicht mehr drin. Du kannst also eine Datei mit der vollen Bandbreite laden (dauert dann 2 Sekunden pro Datei), oder aber 4 Dateien mit 4 Mbit/s, was dann logischerweise pro Datei 4 mal so lange dauert.

    Außerdem können natürlich auch Proxies selbst aus bremsen.

    super95 schrieb:

    ich starte das Programm einfach mehrmals
    Gugst Du Multi-Download nur im Doppelpack
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    http://stackoverflow.com/questions/866350/how-can-i-programmatically-remove-the-2-connection-limit-in-webclient


    Also muss ich einfach nur

    VB.NET-Quellcode

    1. ServicePointManager.DefaultConnectionLimit = XXX
    einfügen und das reicht? Wo genau muss das hin? Und inwiefern wirkt sich das denn aus, wenn das Programm auf zwei verschiedenen PCs bzw Laptop läuft?

    super95 schrieb:

    Wo genau muss das hin?
    na, das muss einmalig durchlaufen werden, bevor dein Proggi den ersten Web-Zugriff tätigt.
    Wo das bei deim Proggi der Fall ist kommt auf dein Proggi an - vlt. Application_Startup - Event, oder Form_Shown, oder Sub Main()...

    super95 schrieb:

    Und inwiefern wirkt sich das denn aus, wenn das Programm auf zwei verschiedenen PCs bzw Laptop läuft?
    Probiers aus und sag du's uns.