Я хотел бы получить некоторую статистику о приложении, использующем SqlConnection, в частности, сколько времени оно тратит на физический вход на сервер.
Простой подход будет примерно таким:
using (SqlConnection connection = ...)
{
Stopwatch loginTimer = Stopwatch.StartNew();
connection.Open()
loginTimer.Stop();
}
Хитрость в том, что я также использую пул соединений и не хочу его отключать. В результате мои показатели искажаются, потому что большинство вызовов .Open()
фактически просто захватывают существующее открытое физическое соединение из пула, поэтому я увижу:
00:00:01.39
00:00:00.02
00:00:00.02
00:00:00.02
...
Приложение использует достаточно соединений и нацелено на SqlAzure, поэтому я действительно ожидаю, что физические входы будут происходить достаточно часто.
Я пробовал проверить соединение, прежде чем пытаться:
if (sqlConnection.State != ConnectionState.Open)
{
// Time and call .Open()
}
К сожалению, логическое соединение SqlConnection не отражает состояние физического соединения, поэтому всегда выполняется блок if
.
Я знаю, что можно создать свой собственный пул соединений, из которого я буду черпать и выполнять, но никогда не закрывать, поэтому я мог бы отслеживать фактическое состояние физического соединения через состояние логического соединения, но я бы действительно предпочитаю этого не делать.