Por que não pode ter mais de 5 WebClient.DownloadFileAsync execução?
-
05-07-2019 - |
Pergunta
Eu estou tentando testar outro aplicativo, solicitando muitos downloads de arquivos.
Então, eu comecei 10 casos WebClient
com seguinte código, mas parece que eu pode ter apenas 5 rodando ao mesmo tempo.
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));
}
}
Eu tenho seguinte resultado:
(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%)
Posso alterar esse limite para simular mais usuários simultâneos?
Solução
Você está lançando todos os 10 da mesma máquina? Verifique se o seu log de eventos. Quando você adicionar outras coisas que podem conter uma ligação, você pode estar correndo para o limite de 10 conexão TCP / IP imposta XP e para cima.
Outras dicas
Uma razão pode ser que o seu servidor (ASP.NET como da extensão .ashx), onde você baixar arquivos a partir de apenas processos 4 Request paralelo.
Você pode alterar isso no seu arquivo web.config.
Você precisa aumentar as conexões max para o servidor no arquivo de configuração
<system.net>
<connectionManagement>
<add address=“*“ maxconnection=“100“ />
</connectionManagement>
</system.net>