2011-03-02 31 views
12

Tôi đang cố gắng cải thiện tốc độ mà ứng dụng MVC2 của tôi đang khởi động.Cải thiện hiệu suất khởi động ASP.NET MVC

Tôi đã làm một vòng đầu tiên của mẫu hiệu suất, và nó xuất hiện rằng

MvcAreaRegistration.RegisterAllAreas 

là chiếm phần lớn thời gian khởi động.

Tôi đọc here bạn cũng có thể đăng ký theo cách thủ công của khu vực và tôi muốn dùng thử, nhưng tôi không chắc cách cú pháp hoạt động trên trang đó.

Vì vậy, (đầu tiên) câu hỏi của tôi là: làm cách nào tôi có thể đăng ký Khu vực của mình theo cách thủ công?

Trả lời

5

Đầu tiên chuẩn bị cho mình một phương pháp helper trong Global.asax như thế này:

private static void RegisterArea<T>(RouteCollection routes, object state) where T : AreaRegistration 
{ 
    AreaRegistration registration = (AreaRegistration)Activator.CreateInstance(typeof(T)); 
    AreaRegistrationContext registrationContext = new AreaRegistrationContext(registration.AreaName, routes, state); 
    string areaNamespace = registration.GetType().Namespace; 
    if (!String.IsNullOrEmpty(areaNamespace)) 
    registrationContext.Namespaces.Add(areaNamespace + ".*"); 
    registration.RegisterArea(registrationContext); 
} 

Bây giờ bạn có thể sử dụng phương thức này để đăng ký nhãn hiệu trong Application_Start như thế này:

//Replace AreaRegistration.RegisterAllAreas(); with lines like those 
RegisterArea<FirstAreaRegistration>(RouteTable.Routes, null); 
RegisterArea<SecondAreaRegistration>(RouteTable.Routes, null); 

Các lớp AreaRegistration là tạo ra bởi Visual Studio khi bạn thêm khu vực mới, bạn có thể tìm thấy chúng trong thư mục Areas/areaName.

0

Bạn có thể thực hiện việc này hoàn toàn bằng tay và tránh sử dụng triển khai RegisterArea.

Kiểm tra bài viết này: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

Nói tóm lại - bạn cần phải thêm "khu vực" DataToken để định tuyến của bạn:

private void RegisterAreas(RouteCollection routes) 
{ 
    // AreaRegistration.RegisterAllAreas(); 
    var route = routes.MapRoute(
     "MyArea_Default", 
     "MyArea/{controller}/{action}/{id}", 
     new { controller = "App", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "MyProject.Areas.*" } 
    ).DataTokens.Add("Area", "CDR"); 
} 
Các vấn đề liên quan