Skip to content

Commit 4528f50

Browse files
perf: switch typeSb to use ValueStringBuilder
1 parent aec137e commit 4528f50

3 files changed

Lines changed: 13 additions & 317 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Diagnostics;
33
using System.Runtime.CompilerServices;
44

5-
namespace TUnit.Engine.Helpers;
5+
namespace TUnit.Core.Helpers;
66

77
// From https://github.com/dotnet/runtime/blob/d968dc4bbdc0c26876c2cdaadf42740e891586b9/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/ValueListBuilder.cs#L8
88
internal ref partial struct ValueListBuilder<T>

TUnit.Engine/Helpers/ValueStringBuilder.cs

Lines changed: 0 additions & 301 deletions
This file was deleted.

TUnit.Engine/Services/TestIdentifierService.cs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
using System.Text;
21
using TUnit.Core;
2+
using TUnit.Core.Helpers;
33
using TUnit.Engine.Building;
4-
using TUnit.Engine.Helpers;
54

65
namespace TUnit.Engine.Services;
76

@@ -89,44 +88,41 @@ private static void WriteTypeNameWithGenerics(ref ValueStringBuilder vsb, Type t
8988
{
9089
// Build the full type hierarchy including all containing types
9190
var typeHierarchy = new ValueListBuilder<string>([null, null, null, null]);
91+
var typeVsb = new ValueStringBuilder(stackalloc char[128]);
9292
var currentType = type;
9393

9494
while (currentType != null)
9595
{
9696
if (currentType.IsGenericType)
9797
{
98-
var typeSb = new StringBuilder();
9998
var name = currentType.Name;
10099

101100
var backtickIndex = name.IndexOf('`');
102101
if (backtickIndex > 0)
103102
{
104-
#if NET6_0_OR_GREATER
105-
typeSb.Append(name.AsSpan(0, backtickIndex));
106-
#else
107-
typeSb.Append(name.Substring(0, backtickIndex));
108-
#endif
103+
typeVsb.Append(name.AsSpan(0, backtickIndex));
109104
}
110105
else
111106
{
112-
typeSb.Append(name);
107+
typeVsb.Append(name);
113108
}
114109

115110
// Add the generic type arguments
116111
var genericArgs = currentType.GetGenericArguments();
117-
typeSb.Append('<');
112+
typeVsb.Append('<');
118113
for (var i = 0; i < genericArgs.Length; i++)
119114
{
120115
if (i > 0)
121116
{
122-
typeSb.Append(", ");
117+
typeVsb.Append(", ");
123118
}
124119
// Use the full name for generic arguments to ensure uniqueness
125-
typeSb.Append(genericArgs[i].FullName ?? genericArgs[i].Name);
120+
typeVsb.Append(genericArgs[i].FullName ?? genericArgs[i].Name);
126121
}
127-
typeSb.Append('>');
122+
typeVsb.Append('>');
128123

129-
typeHierarchy.Append(typeSb.ToString());
124+
typeHierarchy.Append(typeVsb.AsSpan().ToString());
125+
typeVsb.Length = 0;
130126
}
131127
else
132128
{
@@ -140,13 +136,14 @@ private static void WriteTypeNameWithGenerics(ref ValueStringBuilder vsb, Type t
140136
// Append all types with + separator (matching .NET Type.FullName convention for nested types)
141137
for (var i = typeHierarchy.Length - 1; i >= 0; i--)
142138
{
143-
if (i > 0)
139+
if (i < typeHierarchy.Length - 1)
144140
{
145141
vsb.Append('+');
146142
}
147143
vsb.Append(typeHierarchy[i]);
148144
}
149145
typeHierarchy.Dispose();
146+
typeVsb.Dispose();
150147
}
151148

152149
private static void WriteTypeWithParameters(ref ValueStringBuilder vsb, ReadOnlySpan<ParameterMetadata> parameterTypes)

0 commit comments

Comments
 (0)