[英]C# MVC 5.1 Razor 3.0 Performance Issue
我在本地开发机器上使用ab.exe(apache bench),使用IIS 8.5的四核i7 / 8gb ram / windows 8.1 pro
我得到一些非常奇怪的性能结果,我无法弄清楚这个问题。 首先,我的web.config有debug = false,trace = false,并且正在以发布模式编译应用程序。 释放模式具有跟踪常量禁用和调试常量禁用并启用了优化。 不安全的代码未被攻击。
我为ab尝试了一些不同的设置,但目前正在使用这些设置:
ab -c 150 -n 1000 -s 5 http://localhost:15007/partials/recipes/_recipe-930.html
ab -c 150 -n 30000 -s 5 http://localhost:15007/partials/recipes/_recipe-930.html > log-currentsite.txt
ab -c 150 -n 1000 -s 5 http://localhost:15008/razor
ab -c 150 -n 30000 -s 5 http://localhost:15008/razor > log-razor.txt
是的,我在热身时过火了 - 但它不需要很长时间:)
15007上的站点是在同一本地计算机上的实时构建模式下的当前实时站点,并且具有所有相同应用程序池设置的相同IIS(默认)15008站点仅具有简单的基本级别代码:
路线配置:
routes.MapRoute(name: "Razor", url: "razor", defaults: new { controller = "Page", action = "Index" });
routes.MapRoute(name: "ASPX", url: "aspx", defaults: new { controller = "Test", action = "Index" });
控制器:
public class PageController : Controller
{
public ActionResult Index()
{
return View();
}
}
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
〜\\查看\\页\\ Index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
Testing
</div>
</body>
</html>
〜\\查看\\测试\\ Index.aspx的
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
Testing
</div>
</body>
</html>
但是现在我已经禁用了aspx测试并且只包括剃须刀:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
结果:
log-currentsite.txt:
Requests per second: 1896.31 [#/sec] (mean)
log-razor.txt
Requests per second: 1163.77 [#/sec] (mean)
只是为了向您展示在项目中启用ASPX时的比较差异以及其中带有字母“a”的静态txt文件:
ASPX
Requests per second: 8086.47 [#/sec] (mean)
Static File:
Requests per second: 7503.54 [#/sec] (mean)
ASPX代码(如上所述,与剃刀相同但没有删除aspx渲染引擎的代码)似乎比同一项目中的静态文件查找更快。 这有点意义,因为检查/流传输文件的IO开销较少。
但问题是为什么剃刀页面的表现至少不是那么近似?
我正在测试的当前实时站点是MVC4 / Razor2,新的也是MVC5 / Razor3,所以虽然我期望有所不同,甚至可能会稍微慢一点,我不会期望一个没有处理的基页击败数据库驱动(db结果缓存,无输出缓存)配方查找和格式化页面,包含大量代码/检查/渲染snipets(太大而无法粘贴)
在我将测试项目更改为MVC5 / Razor3之前,我使用与上面完全相同的代码对MVC4 / Razor2进行了测试,结果大约为2k / sec,因此略高于当前实时站点上的配方页面 - 我也期待。
所以我想问一下,与我的系统/配置/项目上的aspx相比,什么可能导致剃刀获得如此糟糕的性能? 我错过了什么,或者我可以检查? 我忽略了什么?
啊哈,问这个问题我猜想也许是时候思考了。
似乎在Views web.config中存在一些配置问题! 它仍然指向v2而不是v3。 我认为NuGet的更新效果不是很好。 但该页面没有错误。 也许它是2到3之间的链接? 我不会想到那是可能的。
将视图web.config版本号更新到3.0.0后,我得到了我原先的预期:
Razor:
Requests per second: 9696.84 [#/sec] (mean)
:d
编辑:以防其有用的ID喜欢添加我已经将当前的实时网站从MVC4 / Razor2更改为MVC5 / Razor3并且RPS的变化是巨大的:
从:
log-currentsite.txt:
Requests per second: 1896.31 [#/sec] (mean)
至:
log-currentsite.txt:
Requests per second: 5063.96 [#/sec] (mean)
请注意,我写的任何代码都没有变化 - 我不确定在新的mvc中是否只有很多性能调整,或者删除/添加只是修复了我的项目中的某些内容但认为是id共享。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.