2013-04-16 106 views
7

我最近将现有的ASP.NET MVC 2应用程序转换为带有WebAPI后端的MVC 4。不幸的是,我一直在注意到WebAPI方面的一些严重的性能问题。WebAPI性能不佳

我有MiniProfiler设置,并添加了一些步骤,看看我能否确定瓶颈,令我惊讶的是,它不是数据库。在转换之前,这样的请求不会超过〜50ms,所以看到这些简单的请求需要2秒钟以上,这有点令人震惊。

enter image description here

奇怪的是,所有这一切都是该请求,甚至使得它的SQL调用本身之前大部分的延迟出现。

我想知道是否有一种已知的方式将MiniProfiler更深入地结合到WebAPI的调用中,以进一步检查这里实际发生的事情。任何援助将不胜感激。

FWIW,这里是正在使用此请求

的WebAPI控制器代码:

[HttpGet] 
public bool AssetExistsById(string assetId) { 
    using (Current.Profiler.Step("WebAPI Call To Model")) { 
     return Asset.AssetExists(assetId); 
    } 
} 

资产型号:

public static bool AssetExists(string assetId) { 
    using (Current.Profiler.Step("WCF call to DataAccess lib")) { 
     return WcfEndPoint.AssetExists(assetId); 
    } 
} 

谢谢!

更新

于是我发现了什么是怎么回事?原来,我在我的App_Start/WebApiConfig.cs文件中启用系统诊断跟踪。我随机评论了以下内容,并且所有内容都已修复。

config.EnableSystemDiagnosticsTracing(); 

我希望这可以帮助别人!

+2

您是否尝试过使用VS配置文件来弄清楚需要花费那么多时间? –

+0

Web应用程序中是否有任何静态页面/图像来测试加载时间?它可能与网络/服务器相关。 –

+0

@YoussefMoussaoui感谢您的回应!实际上,我剖析了剖析器,但没有发现任何特别有趣的事情,为什么我的请求花了这么长时间......最长的部分是路由请求,但即使那样也相对较短。也许我正在使用错误的分析器?如果有帮助,我使用VS2012。 –

回答

7

因此,我发现这里发生了什么......事实证明,我在我的App_Start/WebApiConfig.cs文件中启用了系统诊断跟踪。我随机评论了以下内容,并且所有内容都已修复。

config.EnableSystemDiagnosticsTracing(); 

我希望这可以帮助别人!

+0

我希望在4个小时前见过这个!我有这个确切的问题,并找到解决方案完全相同的方式。 :)有趣的是,我们只在部署到Azure时看到性能受到影响。在本地运行时,应用程序看起来很好。 –

+0

是的,几周前我又发现了不同的诊断跑步者,并且注意到这次没有延迟问题。有趣的是,你只有在部署到Azure后才看到问题!在运行Release vs Debug时使用诊断跟踪可能存在问题? –

+0

我提到的Azure实例是持续部署和集成测试的目的地。它正在运行构建的调试版本。 –