MAX aantal gelijktijdige httpwebrquiters

Ik ben een stress testen van een web-app en heb een Windows-testprogramma ingesteld dat een aantal threads draait en een webverzoek op elke pagina verzendt.

Probleem is dat ik de volgende uitvoer krijg:

01/09/09 11:34:04 Starting new HTTP request on 10
01/09/09 11:34:04 Starting new HTTP request on 11
01/09/09 11:34:04 Starting new HTTP request on 13
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 Starting new HTTP request on 11
01/09/09 11:34:05 11 has finished!
01/09/09 11:34:05 Starting new HTTP request on 13
01/09/09 11:34:05 13 has finished!
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 14 has finished!
01/09/09 11:34:05 Starting new HTTP request on 11
01/09/09 11:34:05 11 has finished!
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 14 has finished!
01/09/09 11:34:05 Starting new HTTP request on 13
01/09/09 11:34:05 13 has finished!
01/09/09 11:34:05 Starting new HTTP request on 15
01/09/09 11:34:06 Starting new HTTP request on 11
01/09/09 11:34:06 11 has finished!
01/09/09 11:34:06 Starting new HTTP request on 14
01/09/09 11:34:06 14 has finished!

Welk soort ziet eruit alsof er maximaal 5 draden zijn, zelfs als ik 100 als SO maak:

int numberOfThreads = Convert.ToInt32(txtConcurrentThreads.Text);
    List<BackgroundWorker> workers = new List<BackgroundWorker>();
    for (int N = 0; N < numberOfThreads; N++)
    {
        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        workers.Add(worker);
    }
    foreach(BackgroundWorker worker in workers)
    {
        worker.RunWorkerAsync();
    }

Kan iemand me verlichten wat er aan de hand is?

bedankt

EDIT: Als ik als voorgesteld heb, slaap ik gedurende 5 seconden, in plaats van httpwebrequest, dan krijg ik meer draden om te vuren maar niet zoveel als ik had verwacht:

01/09/09 11:56:14 Starting new HTTP request on 7
01/09/09 11:56:14 Starting new HTTP request on 11
01/09/09 11:56:15 Starting new HTTP request on 12
01/09/09 11:56:15 Starting new HTTP request on 13
01/09/09 11:56:16 Starting new HTTP request on 14
01/09/09 11:56:16 Starting new HTTP request on 15
01/09/09 11:56:17 Starting new HTTP request on 16
01/09/09 11:56:17 Starting new HTTP request on 17
01/09/09 11:56:18 Starting new HTTP request on 18
01/09/09 11:56:19 Starting new HTTP request on 7
01/09/09 11:56:19 7 has finished!
01/09/09 11:56:19 Starting new HTTP request on 11
01/09/09 11:56:19 11 has finished!
01/09/09 11:56:19 Starting new HTTP request on 19
01/09/09 11:56:20 Starting new HTTP request on 20
01/09/09 11:56:20 Starting new HTTP request on 12
01/09/09 11:56:20 12 has finished!

Het ziet er nog steeds uit alsof ik slechts 2 draden krijg die elke seconde beginnen, wat Mighty Traag me lijkt. Ik veronderstel dat de console.writine een probleem zou kunnen zijn?

EDIT: I SET

ThreadPool.SetMinThreads(100, 4); 

en

System.Net.ServicePointManager.DefaultConnectionLimit = 100;

en kreeg de volgende resultaten:

01/09/09 14:00:07 Starting new HTTP request on 11
01/09/09 14:00:07 Starting new HTTP request on 81
01/09/09 14:00:07 Starting new HTTP request on 82
01/09/09 14:00:07 Starting new HTTP request on 79
01/09/09 14:00:07 Starting new HTTP request on 83
01/09/09 14:00:07 Starting new HTTP request on 84
01/09/09 14:00:07 Starting new HTTP request on 85
01/09/09 14:00:07 Starting new HTTP request on 87
01/09/09 14:00:07 Starting new HTTP request on 88
...
01/09/09 14:00:07 84 has finished! Took 323.0323 milliseconds
01/09/09 14:00:08 88 has finished! Took 808.0808 milliseconds
01/09/09 14:00:08 96 has finished! Took 806.0806 milliseconds
01/09/09 14:00:08 94 has finished! Took 806.0806 milliseconds
01/09/09 14:00:08 98 has finished! Took 801.0801 milliseconds
01/09/09 14:00:08 80 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 86 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 92 has finished! Took 799.0799 milliseconds
01/09/09 14:00:08 100 has finished! Took 812.0812 milliseconds
01/09/09 14:00:08 82 has finished! Took 1010.101 milliseconds

dus was in staat om een ​​heleboel webverzoeken tegelijk uit te sturen. Die in de rij leek te staan ​​(bellen naar een STA COM+-server), dus dat verwachtte ik.

Bedankt voor je hulp


Antwoord 1, autoriteit 100%

Gaan al uw (of de meeste) verzoeken toevallig naar dezelfde host? Er is een ingebouwde limiet per host. U kunt dit wijzigen in app.config in het system.Net connectionManagementelement .

Het andere is dat de threadpool het aantal threads alleen maar geleidelijk opvoert – het start elke halve seconde een nieuwe thread, IIRC. Zou dat kunnen zijn wat je ziet? Probeer HttpWebRequestuit de vergelijking te verwijderen – slaap in plaats daarvan een paar seconden…

Ik vermoed dat het laatste probleem het probleem is waar je in eerste instantie tegenaan loopt, maar het eerste zal je ook problemen bezorgen.


Antwoord 2, autoriteit 77%

Er is een limiet voor het aantal gelijktijdige uitgaande HTTP-verbindingen. Ik denk dat je dit kunt controleren met behulp van het System.Net.ServicePointManager.DefaultConnectionLimitstatische eigenschap voordat u de HttpWebRequest-objecten maakt.


Antwoord 3, autoriteit 18%

Ik heb hier niet veel over gehoord voor .NET Core. ServicePointManager zat niet in .NET Core 1, maar lijkt in versie 2 weer terug te zijn. Voor de HttpClient kun je echter ook het maximale aantal verbindingen als volgt instellen:

new HttpClient(new HttpClientHandler
                {
                    MaxConnectionsPerServer = 100
                })

Antwoord 4, autoriteit 8%

Als ik onderstaande tag in de Windows-configuratie schrijf, wordt deze elke keer uitgevoerd wanneer onderstaande code wordt uitgevoerd. Dus elke keer dat onderstaande code wordt uitgevoerd, mag ik maximaal 1000000 geen parallel verzoek/antwoord hebben.

HttpWebRequest POSTRequest = (HttpWebRequest)WebRequest.Create("http://yahoo.com");

Tag

<connectionManagement>
 <clear/>
 <add address="*" maxconnection="1000000" />
</connectionManagement>

Other episodes