Warum kann ich nicht mehr als 5 WebClient.DownloadFileAsync laufen haben?
-
05-07-2019 - |
Frage
Ich versuche, eine andere Anwendung zu testen, indem viele Datei-Downloads anfordern.
So begann ich 10 WebClient
Instanzen mit folgenden Code, scheint aber kann ich nur 5 bei gleichzeitig ausgeführt werden.
class Program
{
public static object locker = new object();
public static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
start(i);
Console.ReadLine();
}
private static void start(object row)
{
DateTime start = DateTime.Now;
WebClient client = new WebClient();
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.DownloadProgressChanged += (sender, e) => {
lock (locker){
double throughput = e.BytesReceived /
(DateTime.Now - start).TotalSeconds / 1024 / 1024;
double error = 1 - (1 / throughput);
Console.SetCursorPosition(0, (int)row);
Console.WriteLine(
@"({0}) {1:HH\:mm\:ss.ffff} - {2:0.00}Mb - " +
@"{3:##0}% - {4:0.00}Mb/s ({5:+0.00%;-0.00%;0.00%}){6}",
row, DateTime.Now, e.BytesReceived / 1024 / 1024,
e.ProgressPercentage, throughput, error, " ");
}
};
client.DownloadFileAsync(
new Uri("http://site/Download.ashx?Id=123"),
String.Format("c:\\foo_{0}.xxx", row));
}
}
Ich habe folgende Ausgabe:
(0) 14:51:07.1830 - 39,00Mb - 5% - 0,94Mb/s (-6,45%) (1) 14:51:06.8610 - 39,00Mb - 5% - 1,00Mb/s (+0,24%) (2) 14:51:06.5650 - 39,00Mb - 5% - 0,99Mb/s (-1,34%) (3) 14:51:07.2810 - 38,00Mb - 5% - 0,95Mb/s (-5,12%) (4) 14:51:06.5740 - 37,00Mb - 5% - 0,95Mb/s (-5,19%) (5) 14:50:30.4640 - 0,00Mb - 100% - 0,01Mb/s (-12690,64%) (6) 14:50:30.5390 - 0,00Mb - 100% - 0,01Mb/s (-12845,38%) (7) 14:50:30.8380 - 0,00Mb - 100% - 0,01Mb/s (-13909,70%) (8) 14:50:30.6150 - 0,00Mb - 100% - 0,01Mb/s (-12988,80%) (9) 14:50:30.9210 - 0,00Mb - 100% - 0,01Mb/s (-14079,53%)
Kann ich diese Grenze ändern, um mehr gleichzeitigen Benutzer zu simulieren?
Lösung
Starten Sie alle 10 von der gleichen Maschine? Überprüfen Sie Ihre Ereignisprotokoll. Wenn Sie in anderen Dingen hinzufügen, die eine Verbindung halten können, können Sie für TCP / IP in die Grenze von 10 Verbindungen laufen auf XP auferlegt und höher.
Andere Tipps
Ein Grund dafür könnte sein, dass Ihr Server (ASP.NET als die .ashx Erweiterung), in dem Sie Dateien herunterladen von nur Prozesse 4 Anfrage parallel.
Sie können dies in Ihrer web.config Datei ändern.
Sie müssen die max Verbindungen zum Server in der Konfigurationsdatei erhöhen
<system.net>
<connectionManagement>
<add address=“*“ maxconnection=“100“ />
</connectionManagement>
</system.net>