簡體   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