-
Notifications
You must be signed in to change notification settings - Fork 610
Expand file tree
/
Copy pathProgram.cs
More file actions
109 lines (95 loc) · 3.07 KB
/
Copy pathProgram.cs
File metadata and controls
109 lines (95 loc) · 3.07 KB
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
using Dapper;
using StackExchange.Profiling;
using System;
using System.Data.Common;
using System.Diagnostics;
using System.Net;
using System.Threading;
using static System.Console;
namespace Samples.Console
{
/// <summary>
/// simple sample console application.
/// </summary>
public static class Program
{
/// <summary>
/// application entry point.
/// </summary>
/// <param name="args">application command line arguments.</param>
public static void Main()
{
try
{
Test();
WriteLine(MiniProfiler.Current.RenderPlainText());
TestMultiThreaded();
WriteLine(MiniProfiler.Current.RenderPlainText());
if (Debugger.IsAttached)
ReadKey();
}
catch (Exception ex)
{
WriteLine(ex);
}
}
/// <summary>
/// test the profiling.
/// </summary>
public static void Test()
{
var mp = MiniProfiler.StartNew("Test");
using (mp.Step("Level 1"))
using (var conn = GetConnection())
{
conn.Query<long>("select 1");
using (mp.Step("Level 2"))
{
conn.Query<long>("select 1");
}
using (var wc = new WebClient())
using (mp.CustomTiming("http", "GET https://google.com"))
{
wc.DownloadString("https://google.com");
}
}
mp?.Stop();
}
public static void TestMultiThreaded()
{
var mp = MiniProfiler.StartNew("Locking");
static void doWork() => Thread.Sleep(new Random().Next(1, 50));
using (mp.Step("outer"))
{
System.Threading.Tasks.Parallel.For(0, 5, i =>
{
doWork();
using (mp.Step("step " + i))
{
doWork();
using (mp.Step("sub-step" + i))
{
doWork();
}
}
});
}
}
/// <summary>
/// Returns an open connection that will have its queries profiled.
/// </summary>
/// <returns>the database connection abstraction</returns>
public 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;
}
}
}