WebClient를 5 개 이상 사용할 수없는 이유는 DownloadFileAync를 실행할 수 있습니까?

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 개를 모두 출시하고 있습니까? 이벤트 로그를 확인하십시오. 연결을 보유 할 수있는 다른 것들을 추가하면 XP 이상에 부과 된 TCP/IP의 10 연결 제한으로 실행될 수 있습니다.

다른 팁

한 가지 이유는 서버 (.ASHX 확장자의 ASP.NET)가 프로세스에서만 파일을 다운로드하는 것이기 때문일 수 있습니다. 4 병렬 요청.

web.config 파일에서 이것을 변경할 수 있습니다.

구성 파일에서 서버에 대한 최대 연결을 늘려야합니다.

<system.net>

<connectionManagement>

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

</connectionManagement>

</system.net>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top