MiniProfiler - 在控制台应用程序中复制 Web 视图信息

gmn*_*gmn 3 .net c# console miniprofiler

在控制台应用程序中使用迷你分析器时,是否有可能获得与在 Web 应用程序中获得的相同级别的信息?理想情况下,我只想在控制台中自行托管 Web UI,但看起来这是不可能的。

我的主要目标是获取在调用时执行的 sqlqueries 及其参数/运行时间。我已经尝试过 RenderPlainText() 解决方案,它远没有 webview 那么详细,而且似乎没有一个钩子可以用来在发生有趣的事情时记录其内容。

Nic*_*ver 5

由于人们似乎都想要各种复杂的数据,因此没有一种内置方法可以获取分析器的成熟的基于文本的输出(RenderPlainText()盒子里有)。但有几个选择!你可以:

  • 通过抓取计时来手动渲染探查器输出。如果您只需要查询列表,您可以循环所有查询级别的计时并打印出它们的自定义计时。这听起来很不祥,因为它是一棵树,但可以profiler.GetTimingHierarchy()将它们全部作为列表,例如:
var profiler = MiniProfiler.StartNew();
using (profiler.Step("MyStep"))
using (profiler.CustomTiming("sql", "Select *"))
{
    // Stuff
}
profiler.Stop();

foreach (var timing in profiler.GetTimingHierarchy())
{
    if (timing.HasCustomTimings)
    {
        foreach (var timingType in timing.CustomTimings)
        {
            Console.WriteLine(timingType.Key + " queries:");
            foreach (var queryTiming in timingType.Value)
            {
                Console.WriteLine($"  {queryTiming.DurationMilliseconds} ms - {queryTiming.CommandString}");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生:

sql queries:
  0.9 ms - Select *
Run Code Online (Sandbox Code Playgroud)
  • 或者,更复杂的是,使用分析器的共享存储并在任何地方的 Web 应用程序中查看它们。例如,如果您将控制台应用程序设置为存储在 Redis 中(默认情况下位于内存中),那么您可以将 Web 应用程序指向同一存储并使用 Web UI 来查看它们。您只需确保您的“用户”ID 匹配即可。这就是.UserIdProvideron 选项(默认为 Web 端的 IP 地址)。例如,在 ASP.NET Core 中:
sql queries:
  0.9 ms - Select *
Run Code Online (Sandbox Code Playgroud)

使用第二个选项时,请注意,如果您从 MiniProfiler Web UI 中单击“共享”,URL 是一致的,唯一改变的是 GUID。您可以获取电流profiler.Id并使用它来生成指向控制台的便捷链接。