【问题标题】:T4MVC and performance issuesT4MVC 和性能问题
【发布时间】:2021-08-04 14:50:44
【问题描述】:

我已经使用 T4MVC 有一段时间了。我有一个每年都在增长的高流量网站,我们注意到了一些性能问题。我们正在使用 LeanSentry,并且我们在 T4MVC URL 生成中看到了这些类型的 CPU 峰值。以下是这些代码行可用的高 CPU 使用率快照。

这是一个有效的问题还是别的什么?

性能命中代码生成 URL 示例

protected virtual void PopulateScheduleGameLinks(List<ScheduleGroupDisplay<ScheduleGameDisplay>> gamesGroup)
        {
            gamesGroup.SelectMany(q => q.Games)
                .ToList()
                .ForEach(
                    q =>
                    {
                        foreach (var asset in q.Assets)
                        {
                            asset.Url = Helper.GetFilePath(asset.Url, asset.Version);
                        }

                        if (q.ExternalId != null)
                        {
                            long ticks;
                            if (long.TryParse(q.ExternalId, out ticks) &&
                                q.StatisticsType != StatisticsType.MyStatsOnline &&
                                q.StatisticsType != StatisticsType.ScorebookPlus &&
                                q.Assets.All(t => t.Type != GameAssetType.Scoresheet))
                            {
                                q.Assets.Add(new ScheduleGameAssetDisplay
                                {
                                    Type = GameAssetType.Scoresheet,
                                    Url = Url.Action(MVC.EventReports.GameStatistics(q.EventId, null, q.Id.ToString()).AddReportPdf().AddRouteValue(Config.QueryString.Version, ticks))
                                });
                            }
                        }

                        q.LiveGameLink = this.BuildScoreCastUrl(q.StatisticsType, q.ExternalId, null, q.Id, q.EventId, q.SportHost, q.EventName.GenerateSlug());
                        q.CalendarLink = Url.Action(MVC.Calendar.Game(q.Id));
                    });

        }

【问题讨论】:

    标签: .net asp.net-mvc iis t4mvc


    【解决方案1】:

    除了调用UrlHelper.RouteUrl,也就是part of MVC,T4MVC 本身并没有做太多事情。所以我怀疑如果你不使用 T4MVC 直接使用UrlHelper.RouteUrl 来生成 URL,你会看到同样的事情。

    可能是这种 MVC 方法有点昂贵,并且性能问题是由于对它的调用过多而无法呈现单个页面(例如,如果页面非常复杂并且包含许多生成的 URL)。

    【讨论】:

    • 我正在运行 Perfview 并看到同样的事情,但处理时间很长。我浏览了 1000 个游戏的大型列表,并为它们附加了强类型链接。对于许多 url 创建来说,这可能不是最佳选择。是的,T4MVC 不是性能下降的直接原因,但它指向其他代码。我用示例代码更新了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2020-04-05
    • 2016-08-21
    • 2012-08-18
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多