2 Stimmen

Maximale Anzahl von Konsolen, die wir gleichzeitig betreiben können

Zwei Fragen:

  1. Ich frage mich nur, ob es eine Grenze für die maximale Anzahl von Konsolen gibt, die wir spawnen können.

  2. Wir haben ein Szenario, in dem wir eine Reihe von Dateien über das Internet herunterladen möchten. Wir können zwar Threads für das Downoladen jeder Datei verwenden, aber da ich gelernt habe, dass es ein Limit von 2 Threads für das Herunterladen gibt, denken wir daran, mehrere Konsolen zu erstellen und intern Threads zu erstellen und mehrere Dateien gleichzeitig herunterzuladen.

Ich frage mich nur, was andere denken. Danke

4voto

Jon Skeet Punkte 1325502

Die Anzahl der gleichzeitigen HTTP-Verbindungen, die Sie zu demselben Server herstellen können, können Sie in der Datei <connectionManager> Element der app.config. Dies wäre ein weit Das ist eine bessere Lösung, als zu versuchen, das Problem über Spawning zu umgehen... obwohl man sich trotzdem vernünftig beschränken sollte.

Zum Beispiel:

<configuration>
  <system.net>
    <connectionManagement>
      <!-- Increase the number of concurrent connections per server to 8. -->
      <add address = "*" maxconnection = "8" />
    </connectionManagement>
  </system.net>
</configuration>

Beachten Sie auch, dass dies auf einer pro Zieladresse Wenn Sie versuchen, von 20 verschiedenen Websites herunterzuladen, werden Sie ohnehin nicht an das Limit stoßen (auch wenn Ihnen vielleicht die Bandbreite ausgeht).

4voto

Justin Punkte 82143

Obwohl es eine theoretische Grenze für die Anzahl der Konsolen/Prozesse gibt, die Sie auf der Grundlage der maximalen Anzahl von Handles usw. geöffnet haben können, ist diese Grenze extrem hoch, und es ist unwahrscheinlich, dass Sie sie erreichen werden.

Beachten Sie, dass Sie die Anzahl der zulässigen Verbindungen tatsächlich erhöhen können - standardmäßig ist sie auf 2 eingestellt:

ServicePointManager.DefaultConnectionLimit = myLimit;

Ce site Blog-Artikel könnte Ihnen ebenfalls helfen.

3voto

Winston Smith Punkte 20909

Sie können die WebClient-Klasse erweitern, um das Verbindungslimit für den Dienstpunkt außer Kraft zu setzen. Dadurch entfällt die Notwendigkeit, mehrere Instanzen Ihrer Anwendung zu erzeugen:

public class MyWebClient : WebClient 
{
    protected override WebRequest GetWebRequest(Uri address) {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
        req.ServicePoint.ConnectionLimit = 50;
        return (WebRequest)req;
    }
}

-1voto

TomTom Punkte 1

Hängt im Wesentlichen von der Größe Ihres RAM ab ;)

-1voto

KMån Punkte 9806

Zum einen denke ich, dass die Konsole nur eine weitere App für das Betriebssystem, so dass es wirklich durch Ihren Speicher (RAM) begrenzt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X