gpt4 book ai didi

asp.net-mvc - ASP.NET MVC部分 View 变慢?

转载 作者:行者123 更新时间:2023-12-03 11:58:29 25 4
gpt4 key购买 nike

我只是碰巧检查了我们正在构建的ASP.NET MVC应用程序的性能。我打算将局部 View 插入循环,出于好奇,我检查了渲染页面所花的时间。结果不好。

我需要做更多结论性的调查,但以防万一有人遇到类似问题或有更多见识,这就是我到目前为止的情况。首先,我应该说所有结果和测量都是在加载多个页面之后完成的,并且我已经在web.config中设置了<compilation debug="false">

  • 似乎单个渲染局部发生约5ms的命中(至少在我的环境中)。当内联部分 View 的实际内容时,我得到的实际上是0ms。
  • 当我在约70个元素的循环中包含一个空的局部 View 时,总渲染时间增加了〜60ms。因此,大概有一些缓存,但这并不理想。
  • 我调试了ASP.NET MVC,发现缓存了部分 View ,但它仅缓存了ascx的路径。然后,每次使用BuildManager.CreateInstanceFromVirtualPath方法实例化实际 View 。
  • 现在有趣的是:当使用WebForms语法(<my:UserContol runat="server" />)包含相同的局部 View 时,多余的60ms消失了。

  • 因此,根据上述观察结果,罪魁祸首似乎是BuildManager.CreateInstanceFromVirtualPath方法。也许,它并不应该被多次调用。 Webforms大概不使用它。或以某种方式仅对每个ascx使用一次?

    最佳答案

    我刚刚将MVC2 View 从在循环中使用局部 View 更改为单个 View ,即:

    <table>
    foreach(var a in items)
    {
    <%: Html.Partial("SomePartialView",a) %>
    }
    </table>

    其中SomePartialView包含用于呈现表中单行的代码,例如:
    <tr><td>Model.Name</td><td>Model.description</td></tr>

    至 :
    foreach(var a in items)
    {
    <tr><td>a.Name</td><td>a.description</td></tr>
    }

    对于渲染900行的 View ,页面渲染时间从5分钟以上的页面加载减少到不到30秒,这非常有说服力地证明了调用部分 View 时会产生大量开销。我敢肯定,当您有一个调用时,这可以忽略不计,但是在循环中所有这些加起来了,所以我建议尽可能避免在循环中使用局部 View 。

    关于asp.net-mvc - ASP.NET MVC部分 View 变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626272/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com