-
Notifications
You must be signed in to change notification settings - Fork 2
/
Program.cs
118 lines (92 loc) · 3.12 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System.Data.Common;
using System.Threading;
using log4net;
using log4net.Config;
using Profiling.Log4Net;
using StackExchange.Profiling;
using StackExchange.Profiling.Helpers.Dapper;
namespace Sample.Console
{
internal static class Program
{
private static void Main()
{
//Configure log4Net
XmlConfigurator.Configure();
//Init Logger
var logger = LogManager.GetLogger("MainLogger");
//Common usages of this library, profilerProvider
MiniProfilerProvider(logger);
//Additional usages, log4net extension
Log4NetExtensions(logger);
}
/// <summary>
/// This is common of usages
/// </summary>
/// <param name="logger">The logger.</param>
private static void MiniProfilerProvider(ILog logger)
{
MiniProfilerLog.SetUpLog4Net(logger);
var mp = MiniProfiler.Start("Provider");
using (mp.Step("Level 1"))
using (var conn = GetConnection())
{
conn.Query<long>("select 1");
using (mp.Step("Level 2"))
{
conn.Query<long>("select 1");
conn.Query("select 2");
using (mp.Step("Level 3.1"))
{
Thread.Sleep(500);
}
}
using (mp.Step("Level 2.2"))
{
conn.Query("select 1");
Thread.Sleep(500);
}
}
MiniProfiler.Stop();
}
/// <summary>
/// Returns an open connection that will have its queries profiled.
/// </summary>
/// <returns>the database connection abstraction</returns>
private static DbConnection GetConnection()
{
DbConnection cnn = new System.Data.SQLite.SQLiteConnection("Data Source=:memory:");
// to get profiling times, we have to wrap whatever connection we're using in a ProfiledDbConnection
// when MiniProfiler.Current is null, this connection will not record any database timings
if (MiniProfiler.Current != null)
{
cnn = new StackExchange.Profiling.Data.ProfiledDbConnection(cnn, MiniProfiler.Current);
}
cnn.Open();
return cnn;
}
/// <summary>
/// Additional, using logManager Exstension
/// </summary>
/// <param name="logger">The logger.</param>
private static void Log4NetExtensions(ILog logger)
{
logger.StartProfiler();
using (logger.Step("StepA"))
{
Thread.Sleep(100);
using (logger.Step("StepA.B"))
{
Thread.Sleep(50);
}
}
logger.StopProfiler();
logger.StartProfiler("New Session");
using (logger.Step("StepA"))
{
Thread.Sleep(50);
}
logger.StopProfiler();
}
}
}