如何使用控制台应用程序存储MIniProfiler数据

时间:2014-09-03 06:50:09

标签: c# console-application mvc-mini-profiler

我已经实现了一个控制台应用程序并将Miniprofiler添加到此应用程序中。

现在我想将Miniprofiler数据存储到数据库中。我已经执行了脚本来创建表到数据库。你可以找到脚本here

我已在this

上查看了答案

但是如何将探查器值存储到相关表中?

在MVC下面,line用于存储值:

MiniProfiler.Settings.Storage = new SqlServerStorage("<your connection string>");

如何从控制台应用程序中存储这些值?

1 个答案:

答案 0 :(得分:4)

以上工作完全正常,并将预期数据记录到MiniProfilersMiniProfilerTimings表中。设置代码中的关键位是:

  • 指定存储提供商(您已经拥有此服务器)
  • 指定探查器提供程序(在我的情况下为单例)
  • 围绕工作启动/停止探查器
  • 在工作后保存探查器

代码:

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();
    }
}