У меня есть следующий код, который я сравниваю с jMeter и получаю около 3000 запросов в секунду на моей машине localhost (await
отсутствует намеренно для запуска синхронно):
public async Task<HttpResponseMessage> Get()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
Проблема заключается в том, что, когда я приостанавливаю запрос на одну секунду, как показано ниже, по какой-либо причине пропускная способность составляет до 10 запросов в секунду для каждого процесса w3wp.exe(снова await
отсутствует намеренно запускается синхронно):
public async Task<HttpResponseMessage> Get()
{
Task.Delay(1000).Wait();
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
Даже когда я использую await
, нет разницы, и 10 запросов в секунду вообще не улучшаются:
public async Task<HttpResponseMessage> Get()
{
await Task.Delay(1000);
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain");
return resp;
}
Я пробовал все настройки конфигурации и ничего не менял вообще: `
web.config
<system.net>
<connectionManagement>
<add address="*" maxconnection="65400" />
</connectionManagement>
</system.net>
Aspnet.config
<system.web>
<applicationPool
maxConcurrentThreadsPerCPU="100" />
</system.web>
machine.config
<processModel
autoConfig="false"
memoryLimit="70"
maxWorkerThreads="100"
maxIoThreads="100" />
Конфигурации установлены как для x86, так и для x64
У меня есть 32 гигабайта mem и 4 физических ядра, Windows 10.
Процессор не переходит на 10% нагрузку при сканировании 10 запросов в секунду.
В приведенном выше коде используется WEB API, но, конечно, я воспроизвожу те же результаты с помощью обработчика HTTP.