Skip to content

Commit 9602271

Browse files
authored
Perf | avoid boxing of SqlGuid in SqlBuffer (dotnet#2306)
1 parent b460fd0 commit 9602271

File tree

4 files changed

+8
-9
lines changed

4 files changed

+8
-9
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5504,7 +5504,7 @@ internal static object GetNullSqlValue(SqlBuffer nullVal, SqlMetaDataPriv md, Sq
55045504
break;
55055505

55065506
case SqlDbType.UniqueIdentifier:
5507-
nullVal.SqlGuid = SqlGuid.Null;
5507+
nullVal.SetToNullOfType(SqlBuffer.StorageType.SqlGuid);
55085508
break;
55095509

55105510
case SqlDbType.Bit:

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6310,7 +6310,7 @@ internal static object GetNullSqlValue(
63106310
break;
63116311

63126312
case SqlDbType.UniqueIdentifier:
6313-
nullVal.SqlGuid = SqlGuid.Null;
6313+
nullVal.SetToNullOfType(SqlBuffer.StorageType.SqlGuid);
63146314
break;
63156315

63166316
case SqlDbType.Bit:

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Server/ValueUtilsSmi.netfx.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,6 @@ private static void GetNullOutputParameterSmi(SmiMetaData metaData, SqlBuffer ta
152152
// special case SqlBinary, 'cause tds parser never sets SqlBuffer to null, just to empty!
153153
targetBuffer.SqlBinary = SqlBinary.Null;
154154
}
155-
else if (SqlBuffer.StorageType.SqlGuid == stype)
156-
{
157-
targetBuffer.SqlGuid = SqlGuid.Null;
158-
}
159155
else
160156
{
161157
targetBuffer.SetToNullOfType(stype);

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlBuffer.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ internal struct Storage
109109
private bool _isNull;
110110
private StorageType _type;
111111
private Storage _value;
112-
private object _object; // String, SqlBinary, SqlCachedBuffer, SqlGuid, SqlString, SqlXml
112+
private object _object; // String, SqlBinary, SqlCachedBuffer, SqlString, SqlXml
113113

114114
internal SqlBuffer()
115115
{
@@ -815,14 +815,17 @@ internal SqlGuid SqlGuid
815815
}
816816
else if (StorageType.SqlGuid == _type)
817817
{
818-
return IsNull ? SqlGuid.Null : (SqlGuid)_object;
818+
return IsNull ? SqlGuid.Null : new SqlGuid(_value._guid);
819819
}
820820
return (SqlGuid)SqlValue; // anything else we haven't thought of goes through boxing.
821821
}
822822
set
823823
{
824824
Debug.Assert(IsEmpty, "setting value a second time?");
825-
_object = value;
825+
if (!value.IsNull)
826+
{
827+
_value._guid = value.Value;
828+
}
826829
_type = StorageType.SqlGuid;
827830
_isNull = value.IsNull;
828831
}

0 commit comments

Comments
 (0)