5

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

我做了以下我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.6s

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

谢谢你的回复。

+2

只有在向IIS发出第一次请求时才会出现糟糕的性能吗?这可能是由IIS创建初始工作进程造成的。 – alex 2015-06-10 14:50:41

+0

我看到相同的东西,特别是那个调用来映射归因路线。我怀疑这是因为它正在扫描更多的程序集而不是查找所有属性,或者只是反射必然比编程式路由定义慢。 – 2017-11-18 17:11:18

回答

0

事实证明,这个操作的真贵位不被映射你的归因路线,那就是在这之前可能发生MVC需要创建的ControllerFactory和检索所有的控制器类型。该过程在我的项目中占用1245毫秒,而MapMvcAttributeRoutes()函数的其余部分大约需要45毫秒。我的猜测是,如果你不使用属性路由,控制器可以根据需要而不是一次全部找到。