Pourquoi ne puis-je pas avoir plus de 5 WebClient.DownloadFileAsync en cours d'exécution?

StackOverflow https://stackoverflow.com/questions/1602189

  •  05-07-2019
  •  | 
  •  

Question

J'essaie de tester une autre application en demandant plusieurs téléchargements de fichiers.

J'ai donc lancé 10 instances WebClient avec le code suivant, mais il semble que je ne puisse en exécuter que cinq à la fois.

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));
    }
}

J'ai la sortie suivante:

(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%)

Puis-je modifier cette limite pour simuler plus d'utilisateurs simultanés?

Était-ce utile?

La solution

Lancez-vous tous les 10 à partir de la même machine? Vérifiez votre journal des événements. Lorsque vous ajoutez d'autres éléments susceptibles de contenir une connexion, vous risquez de vous heurter à la limite de 10 connexions imposée pour TCP / IP sur XP et les versions supérieures.

Autres conseils

Une des raisons pourrait être que votre serveur (ASP.NET portant l'extension .ashx), où vous téléchargez des fichiers uniquement à partir de processus 4 Demander en parallèle.

Vous pouvez modifier cela dans votre fichier web.config.

Vous devez augmenter le nombre maximal de connexions au serveur dans le fichier de configuration

<system.net>

<connectionManagement>

    <add address=“*“ maxconnection=“100“ />

</connectionManagement>

</system.net>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top