【问题标题】:Poor Performance And Slow Website With MVC 5 Attribute Routing使用 MVC 5 属性路由的性能差和网站速度慢
【发布时间】:2015-04-09 04:16:46
【问题描述】:

我正在使用 mvc5 在 Azure 上开发一个网站。我使用属性路由,在控制器上使用路由和路由前缀。我用 action.link 助手打电话。我没有命名我的路线。

我在 route.config 上做了以下操作:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.LowercaseUrls = true;
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

我的控制器是这样的:

[OutputCache(Duration = 600, Location = System.Web.UI.OutputCacheLocation.Client)]
[RoutePrefix("istanbul/kadikoy")]
[Route("{action=index}")]
public class KadikoyController : Controller
{

    public ActionResult Index()
    {
        return View();
    }

    [Route("kadikoy-tarihi")]
    public ActionResult KadikoyTarihi()

作为服务器响应时间,我的性能非常差,即 9.6 秒

如果我注释掉属性路由代码,使用默认路由,我有2.1秒的服务器响应时间。

感谢您的回复。

【问题讨论】:

  • 性能不佳是否只发生在第一次向 IIS 请求期间?这可能是由 IIS 创建初始工作进程引起的。
  • 我看到了同样的事情,特别是调用来映射属性路由。我怀疑这是因为它扫描的程序集比查找所有属性所需的要多,或者可能只是反射必然比编程路由定义慢。

标签: c# routes asp.net-mvc-5 asp.net-mvc-routing attributerouting


【解决方案1】:

事实证明,这个操作真正昂贵的地方不是映射属性路由,而是在此之前 MVC 需要创建 ControllerFactory 并检索所有 Controller 类型。该过程在我的项目中占 1245 毫秒,而 MapMvcAttributeRoutes() 函数的其余部分大约需要 45 毫秒。我的猜测是,如果您不使用属性路由,控制器会根据需要而不是一次性找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 2013-10-28
    • 2018-12-20
    • 1970-01-01
    • 2014-09-07
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多