Skip to content

Commit 3326a0e

Browse files
committed
Reduce string allocations when parsing variable names.
Signed-off-by: Bradley Grainger <[email protected]>
1 parent 8466783 commit 3326a0e

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

src/MySqlConnector/Protocol/Payloads/OkPayload.cs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Globalization;
1+
using System.Buffers.Text;
22
using System.Text;
33
using MySqlConnector.Core;
44
using MySqlConnector.Protocol.Serialization;
@@ -85,24 +85,21 @@ public static void Verify(ReadOnlySpan<byte> span, IServerCapabilities serverCap
8585
break;
8686

8787
case SessionTrackKind.SystemVariables:
88-
var systemVariableOffset = reader.Offset + dataLength;
88+
var systemVariablesEndOffset = reader.Offset + dataLength;
8989
do
9090
{
91-
var variableSv = Encoding.ASCII.GetString(reader.ReadLengthEncodedByteString());
92-
var lenSv = reader.ReadLengthEncodedIntegerOrNull();
93-
var valueSv = lenSv == -1
94-
? null
95-
: Encoding.ASCII.GetString(reader.ReadByteString(lenSv));
96-
switch (variableSv)
91+
var systemVariableName = reader.ReadLengthEncodedByteString();
92+
var systemVariableValueLength = reader.ReadLengthEncodedIntegerOrNull();
93+
var systemVariableValue = systemVariableValueLength == -1 ? default : reader.ReadByteString(systemVariableValueLength);
94+
if (systemVariableName.SequenceEqual("character_set_client"u8) && systemVariableValueLength != 0)
9795
{
98-
case "character_set_client":
99-
clientCharacterSet = valueSv;
100-
break;
101-
case "connection_id":
102-
connectionId = Convert.ToInt32(valueSv, CultureInfo.InvariantCulture);
103-
break;
96+
clientCharacterSet = Encoding.ASCII.GetString(systemVariableValue);
10497
}
105-
} while (reader.Offset < systemVariableOffset);
98+
else if (systemVariableName.SequenceEqual("connection_id"u8))
99+
{
100+
connectionId = Utf8Parser.TryParse(systemVariableValue, out int parsedConnectionId, out var bytesConsumed) && bytesConsumed == systemVariableValue.Length ? parsedConnectionId : default(int?);
101+
}
102+
} while (reader.Offset < systemVariablesEndOffset);
106103
break;
107104

108105
default:

0 commit comments

Comments
 (0)