繁体   English   中英

C#MVC 5.1 Razor 3.0性能问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM