Skip to content

Commit b8aec7c

Browse files
SimonCroppbording
andauthored
avoid some string and array alloc in ParseVersion (#7349)
* avoid some string alloc in ParseVersion * Simplify * Change parameter type and improve naming * Remove string split from ctor --------- Co-authored-by: Brandon Ording <[email protected]>
1 parent ae34e29 commit b8aec7c

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/NServiceBus.Core/Routing/MessageDrivenSubscriptions/MessageType.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace NServiceBus.Unicast.Subscriptions;
22

33
using System;
4-
using System.Linq;
54

65
/// <summary>
76
/// Representation of a message type that clients can be subscribed to.
@@ -24,9 +23,18 @@ public MessageType(Type type)
2423
public MessageType(string messageTypeString)
2524
{
2625
ArgumentException.ThrowIfNullOrWhiteSpace(messageTypeString);
27-
var parts = messageTypeString.Split(',');
26+
2827
Version = ParseVersion(messageTypeString);
29-
TypeName = parts.First();
28+
29+
var messageTypeSpan = messageTypeString.AsSpan();
30+
var index = messageTypeSpan.IndexOf(',');
31+
32+
if (index >= 0)
33+
{
34+
messageTypeSpan = messageTypeSpan[..index];
35+
}
36+
37+
TypeName = messageTypeSpan.ToString();
3038
}
3139

3240
/// <summary>
@@ -62,17 +70,19 @@ public MessageType(string typeName, Version version)
6270
/// </summary>
6371
public Version Version { get; }
6472

65-
static Version ParseVersion(string versionString)
73+
static Version ParseVersion(ReadOnlySpan<char> input)
6674
{
67-
const string version = "Version=";
68-
var index = versionString.IndexOf(version);
75+
const string versionPrefix = "Version=";
76+
var versionPrefixIndex = input.IndexOf(versionPrefix);
6977

70-
if (index >= 0)
78+
if (versionPrefixIndex >= 0)
7179
{
72-
versionString = versionString.Substring(index + version.Length)
73-
.Split(',').First();
80+
input = input[(versionPrefixIndex + versionPrefix.Length)..];
81+
var firstComma = input.IndexOf(',');
82+
input = input[..firstComma];
7483
}
75-
return Version.Parse(versionString);
84+
85+
return Version.Parse(input);
7686
}
7787

7888
/// <summary>

0 commit comments

Comments
 (0)