【发布时间】:2017-03-16 03:32:12
【问题描述】:
我最近将我们现有的 ASP.NET MVC 2 应用程序转换为带有 WebAPI 后端的 MVC 4。不幸的是,我注意到 WebAPI 存在一些严重的性能问题。
我设置了 MiniProfiler,并添加了一些步骤来查看是否可以识别瓶颈,令我惊讶的是,它不是数据库。在转换之前,这样的请求不会超过 50 毫秒,所以看到这些简单的请求需要 2 秒以上的时间有点令人震惊。
奇怪的是,所有这一切都是大部分延迟发生在请求甚至到达 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();
我希望这对其他人有帮助!
【问题讨论】:
-
您是否尝试过使用 VS 配置文件来弄清楚是什么花费了这么多时间?
-
您在 Web 应用程序中是否有任何静态页面/图像来测试加载时间?它可能与网络/服务器有关。
-
@YoussefMoussaoui 感谢您的回复!实际上,我启动了分析器,但没有发现任何关于为什么我的请求花费这么长时间的特别有趣的东西……最长的部分是路由请求,但即使这样也相对较短。也许我使用了错误的分析器?如果有帮助,我正在使用 VS2012。
-
@DmitryStarosta 有趣的想法。我有一个非常重的客户端应用程序,其中包含很多很多 js 文件。也许如果我在 prod 中运行它并缩小所有内容,我会看到不同...
-
@Jaysche Youssef 谈论的是 Visual Studio Profiler,而不是 MvcMiniProfiler。你能重现这个问题吗?您是否在没有 WebApi 的情况下测试了 Asset.AssetExists ?
标签: asp.net-mvc-4 asp.net-web-api mvc-mini-profiler