better perf by avoiding redundant casts#4018
Conversation
There was a problem hiding this comment.
Pull request overview
This PR performs small, targeted micro-optimizations across SqlClient hot paths by replacing repeated is checks + explicit casts with C# pattern matching (is T t) to avoid redundant casts/unboxing and simplify code.
Changes:
- Replace
if (x is T) { (T)x ... }patterns withif (x is T t) { t ... }in multiple locations. - Simplify a couple of
ConvertTo(...)TypeConverter implementations by combining type checks and casts. - Minor readability cleanup in exception handling and bulk-copy XML handling.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/TdsParser.cs | Uses pattern-matching locals to avoid repeated casts/unboxing while writing/serializing values (RPC params, bulk copy, and serialization paths). |
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlUtil.cs | Simplifies SqlException detection/cast when building error arrays. |
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs | TypeConverter ConvertTo now pattern-matches SqlParameter once before calling instance descriptor conversion. |
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs | TypeConverter ConvertTo now pattern-matches SqlConnectionStringBuilder before instance descriptor conversion. |
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlCommand.cs | Avoids duplicate cast by binding SqlString via pattern matching in ANSI size computation logic. |
| src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlBulkCopy.cs | Avoids duplicate cast when converting XmlReader to XmlDataFeed for XML/JSON bulk copy values. |
|
/azp run |
|
Azure Pipelines successfully started running 2 pipeline(s). |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #4018 +/- ##
==========================================
- Coverage 72.36% 66.12% -6.25%
==========================================
Files 287 271 -16
Lines 43149 65716 +22567
==========================================
+ Hits 31223 43452 +12229
- Misses 11926 22264 +10338
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
No description provided.