Skip to content

Commit c40d4fb

Browse files
committed
Inline ReadBytesFromSocketAsync.
This reduces allocations that were introduced by introducing a new async method in d9e2fa1.
1 parent c74f5e0 commit c40d4fb

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

src/MySqlConnector/Protocol/Serialization/SocketByteHandler.cs

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,31 @@ private async ValueTask<int> DoReadBytesAsync(ArraySegment<byte> buffer)
7575
var timerId = RemainingTimeout == Constants.InfiniteTimeout ? 0 :
7676
RemainingTimeout <= 0 ? throw MySqlException.CreateForTimeout() :
7777
TimerQueue.Instance.Add(RemainingTimeout, m_closeSocket);
78+
#if VALUETASKSOURCE
79+
m_socketEventArgs.SetBuffer(buffer.Array, buffer.Offset, buffer.Count);
80+
#else
81+
m_socketAwaitable.EventArgs.SetBuffer(buffer.Array, buffer.Offset, buffer.Count);
82+
#endif
7883
int bytesRead;
7984
try
8085
{
81-
bytesRead = await ReadBytesFromSocketAsync(buffer).ConfigureAwait(false);
86+
#if VALUETASKSOURCE
87+
m_valueTaskSource.Reset();
88+
if (!m_socket.ReceiveAsync(m_socketEventArgs))
89+
{
90+
if (m_socketEventArgs.SocketError != SocketError.Success)
91+
throw new SocketException((int) m_socketEventArgs.SocketError);
92+
else
93+
bytesRead = m_socketEventArgs.BytesTransferred;
94+
}
95+
else
96+
{
97+
bytesRead = await new ValueTask<int>(this, m_valueTaskSource.Version).ConfigureAwait(false);
98+
}
99+
#else
100+
await m_socket.ReceiveAsync(m_socketAwaitable);
101+
bytesRead = m_socketAwaitable.EventArgs.BytesTransferred;
102+
#endif
82103
}
83104
catch (SocketException ex)
84105
{
@@ -102,7 +123,7 @@ private async ValueTask<int> DoReadBytesAsync(ArraySegment<byte> buffer)
102123
public ValueTask<int> WriteBytesAsync(ArraySegment<byte> data, IOBehavior ioBehavior)
103124
{
104125
if (ioBehavior == IOBehavior.Asynchronous)
105-
return WriteBytesToSocketAsync(data);
126+
return DoWriteBytesAsync(data);
106127

107128
try
108129
{
@@ -116,16 +137,7 @@ public ValueTask<int> WriteBytesAsync(ArraySegment<byte> data, IOBehavior ioBeha
116137
}
117138

118139
#if VALUETASKSOURCE
119-
private ValueTask<int> ReadBytesFromSocketAsync(ArraySegment<byte> buffer)
120-
{
121-
m_socketEventArgs.SetBuffer(buffer.Array, buffer.Offset, buffer.Count);
122-
m_valueTaskSource.Reset();
123-
if (!m_socket.ReceiveAsync(m_socketEventArgs))
124-
PropagateSocketAsyncEventArgsStatus();
125-
return new ValueTask<int>(this, m_valueTaskSource.Version);
126-
}
127-
128-
private ValueTask<int> WriteBytesToSocketAsync(ArraySegment<byte> data)
140+
private ValueTask<int> DoWriteBytesAsync(ArraySegment<byte> data)
129141
{
130142
m_socketEventArgs.SetBuffer(data.Array, data.Offset, data.Count);
131143
m_valueTaskSource.Reset();
@@ -134,14 +146,7 @@ private ValueTask<int> WriteBytesToSocketAsync(ArraySegment<byte> data)
134146
return new ValueTask<int>(this, m_valueTaskSource.Version);
135147
}
136148
#else
137-
private async ValueTask<int> ReadBytesFromSocketAsync(ArraySegment<byte> buffer)
138-
{
139-
m_socketAwaitable.EventArgs.SetBuffer(buffer.Array, buffer.Offset, buffer.Count);
140-
await m_socket.ReceiveAsync(m_socketAwaitable);
141-
return m_socketAwaitable.EventArgs.BytesTransferred;
142-
}
143-
144-
private async ValueTask<int> WriteBytesToSocketAsync(ArraySegment<byte> data)
149+
private async ValueTask<int> DoWriteBytesAsync(ArraySegment<byte> data)
145150
{
146151
m_socketAwaitable.EventArgs.SetBuffer(data.Array, data.Offset, data.Count);
147152
await m_socket.SendAsync(m_socketAwaitable);

0 commit comments

Comments
 (0)