如何将启动时间添加到 MiniProfiler?

How can I add startup timings to MiniProfiler?

我想使用 MiniProfiler 计时 Application_OnStart。到目前为止,我一直没有成功。我尝试创建一个 Timing 并将其添加到根的子级,但它没有收集我想要的所有数据。它还从整体配置文件时间中减去启动时间,因此它以负持续时间结束。目前我唯一的解决方案是自己用秒表计时并将其添加到客户端计时。这会从第一个请求中删除客户端计时并添加应用程序启动持续时间。但我没有获得自定义时间等。此外,由于我使用 AddProfilerResults 方法将我的 API 配置文件组合到我的 MVC 配置文件中(对于 MVC UI,它们包含在步骤中),启动API 在第一个 MVC 请求上的时间不包括在内,它基本上丢失了。

            MiniProfiler.Current.ClientTimings = new ClientTimings
            {
                Timings = new List<ClientTimings.ClientTiming>
                {
                    new ClientTimings.ClientTiming
                    {
                        Duration = startTime,
                        Id = Guid.NewGuid(),
                        MiniProfilerId = Guid.NewGuid(),
                        Name = "Application_Start",
                        Start = 0
                    }
                }
            };

我们在 Stack Overflow 上的做法是在启动方法中创建一个 MiniProfiler,向其添加步骤,然后将其呈现为静态字符串:

public static string ApplicationStartTimings { get; private set; }

protected void Application_Start(object sender, EventArgs e)
{
    // init MiniProfiler.Settings here
    // ...
    var prof = new MiniProfiler("Application_Start");

    using (prof.Step("Register routes"))
    {
        RegisterRoutes(RouteTable.Routes);
    }

    // ... more config and steps

    try
    {
        ApplicationStartTimings = prof.Render().ToString();
    }
    catch { }
}

然后您可以通过路由来显示这些时间。这很笨拙,但可以完成工作。

编辑 - 我添加了一个 branch to my MiniProfiler fork which demonstrates 这个工作;这是主索引页面上的输出: