我正在计算我的C#web api的性能。我写了一个非常简单的HelloWorld
回复:
public class HelloWorldController : ApiController
{
public HttpResponseMessage Get()
{
return new HttpResponseMessage()
{
Content = new StringContent("HelloWorld")
};
}
}
我使用JMeter进行测试我设置了1000个用户请求并且它工作正常(CPU使用率高达100%)。但问题是当api的操作时间变长时,响应变得更糟,每个响应只有3个(CPU使用率<7%)。这需要1000个用户请求minuets。
public HttpResponseMessage Get()
{
Thread.Sleep(1000);
return new HttpResponseMessage()
{
Content = new StringContent("HelloWorld")
};
}
谷歌之后我想出了使用异步的想法,但我仍然遇到同样的问题。我不知道问题是什么或我的代码实现。以下是我的示例实现。
public async Task<HttpResponseMessage> Get()
{
return new HttpResponseMessage()
{
Content = new StringContent(await LongOperationAsync())
};
}
private string LongOperation()
{
//long operation here
Thread.Sleep(1000);
return "HelloWorld";
}
private Task<string> LongOperationAsync()
{
return Task.Factory.StartNew(() => LongOperation());
}
任何人都知道这个问题是什么问题或任何想法?
答案 0 :(得分:3)
方法LongOperationAsync和LongOperation也应该 async :
private async Task<string> LongOperation()
{
//long operation here
await Task.Delay(1000);
return "HelloWorld";
}
private async Task<string> LongOperationAsync()
{
var rt = await Task.Run(() => LongOperation());
return rt;
}