2013-04-15 7 views
5

Tôi đang sử dụng MVC 4 và Razor View Engine.Html.ActionLink rất chậm

Tôi có cuộc gọi Html.ActionLink("Title", "Action") được gọi trong vòng lặp foreach với ~ 200 mục và quá trình này mất khoảng 550ms để hoàn tất. Nếu tôi thay thế ActionLink bằng một chuỗi đơn giản, nó chỉ mất ~ 50ms -> Html.ActionLink cần ~ 500ms cho 200 lần lặp!

Có cách nào để tăng tốc độ này không?

Tôi có 5 trong số này trong vòng lặp của tôi vì vậy trang của tôi cần> 3 giây để hiển thị ...
Bản phát hành bản dựng và không có thuộc tính gỡ lỗi trong web.config không có tác dụng.

+0

tôi đã gặp rắc rối với Html.RenderPartial đó là rất chậm. ngay sau khi tôi biên dịch trong bản phát hành và chạy trên IIS, i t rất nhanh. –

+3

Bạn có chắc chắn rằng bạn chỉ đang gọi 'Html.ActionLink (" Tiêu đề "," Hành động ")' và không phải cái gì phức tạp hơn? Ngoài ra, bạn có nhiều tuyến đường đã đăng ký không? Bạn đang chạy mã trên máy nào? –

+1

Thử tạo một tuyến đường cụ thể cho hành động này và sử dụng 'RouteLink' thay vì' ActionLink'. Có rất ít mã để xây dựng một liên kết với điều đó. Và khi tôi nói ** ít hơn rất nhiều mã ** Tôi đang nói về mã được viết bởi Microsoft. –

Trả lời

4

Tôi kết hợp một số mẹo từ nhận xét để đạt được mức giảm từ ~ 3s xuống ~ 250ms để hiển thị trang đầy đủ. Những thay đổi lớn nhất ở đâu:

  • cache các truy vấn DB từ đường tùy chỉnh của tôi (-> 2/3 tiết kiệm thời gian cho mỗi cuộc gọi)
  • "Pregenerate" các liên kết và chỉ thay thế các bộ phận của nó:
    Tôi đã làm một @{ var link = Html.ActionLink("_USER_", "Edit", new { id = "_ID_" }); } trước khi vòng lặp foreach và trong một cái gì đó vòng lặp như @link.Replace("_ID_", user.UserId.ToString()) (bạn không thể sử dụng String.Format, như Html.ActionLink() thoát {0} để %7B0%7D
+1

nghĩ bạn có thể quan tâm để thấy điều này (khoảng 9 phút) https://channel9.msdn.com/Shows/Azure-Friday/Profiling-Live-Azure-Web-Apps-with-Application-Insights –