لماذا لا يمكن أن يكون أكثر من 5 WebClient.DownloadFileAsync تشغيل؟
-
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>