C# MVC 5属性路由的性能差,网站速度慢

C# MVC 5属性路由的性能差,网站速度慢,c#,routes,asp.net-mvc-5,asp.net-mvc-routing,attributerouting,C#,Routes,Asp.net Mvc 5,Asp.net Mvc Routing,Attributerouting,我正在Azure上开发一个带有mvc5的网站。我使用属性路由,在控制器上使用路由和路由前缀。我用action.link助手调用。我没有说出我的路线 我在route.config上执行了以下操作: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); routes.LowercaseUrls = true; routes.MapRoute( name: "Default",

我正在Azure上开发一个带有mvc5的网站。我使用属性路由,在控制器上使用路由和路由前缀。我用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秒


感谢您的回复。

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

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