لماذا لا يمكن أن يكون أكثر من 5 WebClient.DownloadFileAsync تشغيل؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أحاول لاختبار تطبيق آخر عن طريق طلب العديد من تحميل الملفات.

وهكذا، بدأت 10 حالات WebClient مع التعليمات البرمجية التالية، ولكن يبدو أنني يمكن أن يكون فقط 5 على التوالي في نفس الوقت.

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

وحصلت التالية الإخراج:

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

هل يمكنني تغيير هذا الحد لمحاكاة المزيد من المستخدمين المتزامنين؟

هل كانت مفيدة؟

المحلول

هل إطلاق كل 10 من نفس الجهاز؟ تحقق من سجل هذا الحدث الخاص بك. عند إضافة في غيرها من الأمور التي قد عقد الاتصال، قد تكون قيد التشغيل في حدود 10 اتصال TCP / IP المفروضة على XP وما فوق.

نصائح أخرى

وسبب واحد يمكن أن يكون، أن الخادم الخاص بك (ASP.NET اعتبارا من تمديد .ashx)، حيث يمكنك تحميل الملفات من العمليات فقط <م> 4 طلب مواز.

ويمكنك تغيير هذا في ملف web.config الخاص بك.

وأنت بحاجة إلى زيادة الاتصالات كحد أقصى إلى الملقم في ملف التكوين

<system.net>

<connectionManagement>

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

</connectionManagement>

</system.net>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top