Why I can't have more than 5 WebClient.DownloadFileAsync running?
-
05-07-2019 - |
Question
I'm trying to test another application by requesting many file downloads.
So, I started 10 WebClient
instances with following code, but seems I can have just 5 running at same time.
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));
}
}
I got following output:
(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%)
Can I change that limit to simulate more concurrent users?
Solution
Are you launching all 10 from the same machine? Check your event log. When you add in other things that may hold a connection, you may be running into the 10 connection limit for TCP/IP imposed on XP and up.
OTHER TIPS
One reason could be, that your Server (ASP.NET as of the .ashx extension), where you download files from only processes 4 Request parallel.
You can change this in your web.config file.
You need to increase the max connections to the server in the config file
<system.net>
<connectionManagement>
<add address=“*“ maxconnection=“100“ />
</connectionManagement>
</system.net>