如何使用Console应用程序存储MIniProfiler数据
本文关键字:MIniProfiler 数据 程序存储 应用 何使用 Console | 更新日期: 2023-09-27 18:20:23
我已经实现了一个控制台应用程序,并将Miniprofiler添加到该应用程序中。
现在我想将Miniprofiler数据存储到数据库中。我已经执行了创建数据库表的脚本。你可以在这里找到剧本!
我已经审查了这个的答案
但是,如何将探查器值存储到相关表中?
在MVC中,以下行用于存储值:
MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>");
如何从Console应用程序存储这些值?
以上操作完全有效,并将预期数据记录到MiniProfilers
和MiniProfilerTimings
表中。设置代码中的关键位为:
- 指定存储提供程序(您已经有了)
- 指定探查器提供程序(在我的例子中是singleton)
- 在工作周围启动/停止探查器
- 工作结束后保存探查器
代码:
using StackExchange.Profiling;
using StackExchange.Profiling.Storage;
using System;
using System.Threading;
//using StackExchange.Profiling.Helpers.Dapper; // only for table creation
//using System.Data.SqlClient; // only for table creation
static class Program
{
static void Main()
{
const string ConnectionString = "Initial Catalog=MiniProf;Data Source=.;Integrated Security=true;";
//using(var conn = new SqlConnection(ConnectionString))
//{
// conn.Open();
// conn.Execute(SqlServerStorage.TableCreationScript);
//}
MiniProfiler.Settings.Storage = new SqlServerStorage(ConnectionString);
MiniProfiler.Settings.ProfilerProvider = new SingletonProfilerProvider();
MiniProfiler.Settings.ProfilerProvider.Start(ProfileLevel.Info);
DoStuff();
MiniProfiler.Settings.ProfilerProvider.Stop(false);
MiniProfiler.Settings.Storage.Save(MiniProfiler.Current);
}
static void DoStuff()
{
using (MiniProfiler.Current.Step("DoStuff"))
{
for (int i = 0; i < 5; i++)
{
using (MiniProfiler.Current.Step("Loop iteration"))
{
Thread.Sleep(200);
Console.Write(".");
}
}
}
Console.WriteLine();
}
}