4

多くのファイルのダウンロードを要求して、別のアプリケーションをテストしようとしています。

したがって、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%)

その制限を変更して、より多くの同時ユーザーをシミュレートできますか?

4

3 に答える 3

2

1つの理由は、サーバー(.ashx拡張子の時点でASP.NET)で、プロセス4リクエストのみからファイルをダウンロードすることです。

これは、web.configファイルで変更できます。

于 2009-10-21T17:11:09.343 に答える
2

構成ファイルでサーバーへの最大接続数を増やす必要があります

<system.net>

<connectionManagement>

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

</connectionManagement>

</system.net>
于 2009-10-21T18:31:28.520 に答える
1

同じマシンから10個すべてを起動していますか?イベントログを確認してください。接続を保持する可能性のある他のものを追加すると、XP以上に課せられるTCP/IPの接続制限が10に達する可能性があります。

于 2009-10-21T17:19:40.900 に答える