Skip to content

Commit 2a8f998

Browse files
Wraith2cheenamalhotra
authored andcommitted
Perf | Optimize async method allocations (#328)
1 parent d38d554 commit 2a8f998

File tree

2 files changed

+500
-259
lines changed

2 files changed

+500
-259
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlCommand.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public sealed partial class SqlCommand : DbCommand, ICloneable
7070
private static readonly DiagnosticListener _diagnosticListener = new DiagnosticListener(SqlClientDiagnosticListenerExtensions.DiagnosticListenerName);
7171
private bool _parentOperationStarted = false;
7272

73+
internal static readonly Action<object> s_cancelIgnoreFailure = CancelIgnoreFailureCallback;
74+
7375
// Prepare
7476
// Against 7.0 Serve a prepare/unprepare requires an extra roundtrip to the server.
7577
//
@@ -2137,7 +2139,7 @@ public override Task<int> ExecuteNonQueryAsync(CancellationToken cancellationTok
21372139
source.SetCanceled();
21382140
return source.Task;
21392141
}
2140-
registration = cancellationToken.Register(s => ((SqlCommand)s).CancelIgnoreFailure(), this);
2142+
registration = cancellationToken.Register(s_cancelIgnoreFailure, this);
21412143
}
21422144

21432145
Task<int> returnedTask = source.Task;
@@ -2225,7 +2227,7 @@ protected override Task<DbDataReader> ExecuteDbDataReaderAsync(CommandBehavior b
22252227
source.SetCanceled();
22262228
return source.Task;
22272229
}
2228-
registration = cancellationToken.Register(s => ((SqlCommand)s).CancelIgnoreFailure(), this);
2230+
registration = cancellationToken.Register(s_cancelIgnoreFailure, this);
22292231
}
22302232

22312233
Task<SqlDataReader> returnedTask = source.Task;
@@ -2373,7 +2375,7 @@ public Task<XmlReader> ExecuteXmlReaderAsync(CancellationToken cancellationToken
23732375
source.SetCanceled();
23742376
return source.Task;
23752377
}
2376-
registration = cancellationToken.Register(s => ((SqlCommand)s).CancelIgnoreFailure(), this);
2378+
registration = cancellationToken.Register(s_cancelIgnoreFailure, this);
23772379
}
23782380

23792381
Task<XmlReader> returnedTask = source.Task;
@@ -5947,6 +5949,11 @@ internal void CompletePendingReadWithFailure(int errorCode, bool resetForcePendi
59475949
}
59485950
}
59495951
#endif
5952+
internal static void CancelIgnoreFailureCallback(object state)
5953+
{
5954+
SqlCommand command = (SqlCommand)state;
5955+
command.CancelIgnoreFailure();
5956+
}
59505957

59515958
internal void CancelIgnoreFailure()
59525959
{

0 commit comments

Comments
 (0)