Web API 2:比IHttpActionResult更快的无效响应?

时间:2014-03-27 13:59:41

标签: c# http asp.net-web-api asp.net-web-api2

我今天在WebAPI2中构建了一个方法。并提出问题,如果我应该使我的方法无效或保持它作为IHttpActionResult?

有利于我看到IHttpActionResult可以返回任何响应代码。虚空方法的优点是什么?是它更快还是唯一的区别是它总是响应200(或者它是204?)。

有人知道哪一个更快吗?或者如果它与我命名的那些有任何其他重大差异? (这包括虚空无法回应任何事情的事实,IHttpActionResult可以.......)

2 个答案:

答案 0 :(得分:5)

@Felipe Oriani,你真的很好..我很好奇,所以我做了测试。 看到这个惊人的输出。

Test shown

  • Void Avg响应时间为2.075 ms
  • IHttpActionResult平均响应时间为1.651毫秒!

这是相差0.424毫秒

这是使用以下webAPI代码

[Route("test/void")]
public void GetFirst()
{
    StringBuilder stringbuilder = new StringBuilder();
    for (int i = 0; i < 20; i++)
    {
        stringbuilder.Append("something");
    }
    //Thread.Sleep(1000);
}

[Route("test/IHttpActionResult")]
public IHttpActionResult GetSecond()
{
    StringBuilder stringbuilder = new StringBuilder();
    for (int i = 0; i < 20; i++)
    {
        stringbuilder.Append("something");
    }
    //Thread.Sleep(1000);
    return Ok();
}

此外,我尝试在每个请求上给webAPI更多的工作..看看差异是否保持不变,或者如果对于更长的动作,使用IHttpActionResult而不是void是一个真正的改进?

我将迭代设置为200000并在WebAPI代码中取消注释Thread.Sleep(1000)

现在结果:

  • Void Avg响应时间为11.64 ms
  • IHttpActionResult平均响应时间为11.11 ms

这是相差0.53毫秒

我可以得出结论并确认,你说的是真的。 IHttpActionREsult确实比虚空更快。只有不同之处才是真正注意到某些东西。但是,如果您正在寻找次要的迷你优化?这是其中之一!

下面的图片显示结果! second test result

答案 1 :(得分:1)

来自asp.net web api应用程序的每条消息都会返回一个http状态代码。 exception代价很高,因此,如果您将其传递给网络API,则框架应该知道如何引导此问题并更改为http message结果。

没有极端的区别。如果代码抛出void,web api中的200 - OK操作方法将返回与exception不同的内容。实际上我认为它比结果类型的方法更昂贵,因为asp。 net框架需要获取异常并将其更改为http message,如前所述。

如果您在操作方法中指定http message,则可以知道您对客户端的确切响应(我的意思是http status code至少)。我喜欢使用HttpResponseMessage并使用特定的http status code创建回复。