我有以下代码,我使用jMeter进行基准测试,并在我的localhost机器上每秒获得大约3000个请求(await
故意无意地同步运行):
public async TaskGet() { var resp = new HttpResponseMessage(HttpStatusCode.OK); resp.Content = new StringContent(Thread.CurrentThread.ManagedThreadId.ToString(), Encoding.UTF8, "text/plain"); return resp; }
问题是,当我暂停请求一秒钟时,如下所示,由于某种原因,每个w3wp.exe进程的吞吐量降至每秒10个请求(同样await
有意无意地同步运行):
public async TaskGet() { 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 TaskGet() { 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中
aspnet.config
machine.config中
配置为x86和x64
我有32个内存和4个物理内核,Windows 10.
当每秒调整10个请求时,CPU不会超过10%的负载.
上面的代码使用WEB API,但我当然使用HTTP Handler重现相同的结果.