Skip to content

Commit e1c252b

Browse files
committed
Reduce StateChangeEventArgs allocations.
These objects are immutable and can be reused.
1 parent 0cccec0 commit e1c252b

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,12 @@ internal void SetState(ConnectionState newState)
432432
{
433433
var previousState = m_connectionState;
434434
m_connectionState = newState;
435-
OnStateChange(new StateChangeEventArgs(previousState, newState));
435+
var eventArgs =
436+
previousState == ConnectionState.Closed && newState == ConnectionState.Connecting ? s_stateChangeClosedConnecting :
437+
previousState == ConnectionState.Connecting && newState == ConnectionState.Open ? s_stateChangeConnectingOpen :
438+
previousState == ConnectionState.Open && newState == ConnectionState.Closed ? s_stateChangeOpenClosed :
439+
new StateChangeEventArgs(previousState, newState);
440+
OnStateChange(eventArgs);
436441
}
437442
}
438443

@@ -497,6 +502,9 @@ private ConnectionSettings GetConnectionSettings()
497502
}
498503

499504
static readonly IMySqlConnectorLogger Log = MySqlConnectorLogManager.CreateLogger(nameof(MySqlConnection));
505+
static readonly StateChangeEventArgs s_stateChangeClosedConnecting = new StateChangeEventArgs(ConnectionState.Closed, ConnectionState.Connecting);
506+
static readonly StateChangeEventArgs s_stateChangeConnectingOpen = new StateChangeEventArgs(ConnectionState.Connecting, ConnectionState.Open);
507+
static readonly StateChangeEventArgs s_stateChangeOpenClosed = new StateChangeEventArgs(ConnectionState.Open, ConnectionState.Closed);
500508

501509
string m_connectionString;
502510
ConnectionSettings m_connectionSettings;

0 commit comments

Comments
 (0)