0

我有一個asp.net mvc web應用程序的大型應用程序是多語言支持15種不同的語言。由於需要本地化網址,因此我使用屬性路由來本地化我的路由。這創建了2675條路線。Html.ActionLink和Url.Action的性能

我使用Html.ActionLink和Url.Action輔助方法來爲我的控制器動作生成url。我發現儘管在我的部分剃刀視圖中包含這些內容會減慢我的視圖渲染速度。例如,如果我刪除其中的一部分,響應時間可以從5秒到6秒不到一秒。

我相信這個問題可能是圍繞着大量的路線。因此我認爲這是必需的。

有沒有人有過這個問題與路由與大量的路由結合屬性路由?可以包含哪些緩存或類似的協助?我不是指輸出緩存,而是緩存路線以確保Html.ActionLink和Url.Action渲染更快?

編輯

隨着屬性的路由,我已經添加路由前綴屬性我控制器,也歸功於我的行動。以下是一堂課的樣本。我沒有明確路由添加任何地方,我知道 - 我假設它的屬性路由這樣

[RoutePrefix("customer", TranslationKey = "customer")] 
public partial class CustomerController : BaseController 
{ 

[Route("logon", TranslationKey = "logon")] 
public virtual ActionResult LogOn(string returnUrl = "") 
{ 
... 
} 


[GET("changerepresentative/{id:long}")] 
public virtual ActionResult ChangeRepresentative(long id) 
{ 
... 
} 


[GET("profile", TranslationKey = "profile")] 
public virtual ActionResult ProfileInformation() 
{ 
... 
} 

// etc 

} 

的配置屬性路由

RouteTable.Routes.MapAttributeRoutes(config => 
              { 
               var translationProvider = this.routeTranslationProvider.GetProvider(); 
               config.AddRoutesFromAssemblyOf<MvcApplication>(); 
               config.AddTranslationProvider(translationProvider); 
               config.AppendTrailingSlash = true; 
               config.UseLowercaseRoutes = true; 
               config.InheritActionsFromBaseController = true; 
               config.AutoGenerateRouteNames = true; 
               config.RouteNameBuilder = RouteNameBuilders.FirstInWins; 
              }); 
+0

您是在測量調試環境中的調試版本還是生產服務器上的版本 - 生成時間?這兩個給出了非常不同的結果:) –

+0

我測量了一個開發環境的調試和發佈版本,並給出了相對類似的結果 – amateur

+1

只是重讀你的問題。難怪它很慢。在任何情況下你都不需要2675條路線(超過5條似乎過分)。 'Html.ActionLink'等必須搜索該表以確保它們生成儘可能最短的URL(考慮到默認值)。你可以發佈你的自定義網址和一些自定義路線的例子,所以我可能會提出一個替代方案。 (例如,我只添加了一個額外的自定義路由來處理我們系統中的9種語言)。 –

回答

0

我遇到類似的問題與我們的。 NET MVC應用程序。我還沒有找到任何方法來緩存路由表。在找到更好的解決方案之前,您可以用RouteLink代替ActionLink,它會根據密鑰查找路由,因此速度要快得多。