多くのファイルのダウンロードを要求して、別のアプリケーションをテストしようとしています。
したがって、WebClient
次のコードで10個のインスタンスを開始しましたが、同時に実行できるのは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%)
その制限を変更して、より多くの同時ユーザーをシミュレートできますか?