Html.ActionLink和Url.Action的性能

时间:2014-06-16 17:06:40

标签: asp.net-mvc performance asp.net-mvc-4 razor attributerouting

我有一个用于大规模应用程序的asp.net mvc Web应用程序,它支持15种不同语言的多语言。我正在使用属性路由来本地化我的路由,因为需要本地化url。这创造了2675条路线。

我使用Html.ActionLink和Url.Action帮助程序方法为我的控制器操作生成url。我发现虽然在我的Partial Razor Views中包含了这些,但是减慢了我的视图渲染速度。例如,如果我删除其中一些,响应时间可以从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;
                                           });

1 个答案:

答案 0 :(得分:0)

我的.NET MVC应用程序遇到了类似的问题。我也没有找到任何方法来缓存路由表。在找到更好的解决方案之前,您可以将ActionLink替换为RouteLink,{{1}}根据密钥查找路径,因此速度要快得多。