Skip to content

Commit 0b2f84f

Browse files
committed
Hoist loop-invariant value.GetRawStringData
For unknown reasons, the JIT does not perform this optimization in this case, so the call is explicitly hoisted to improve performance.
1 parent b60ff53 commit 0b2f84f

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

Ramstack.Structures/Text/StringView.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,10 @@ public StringView TrimStart(params ReadOnlySpan<char> trimChars)
325325
{
326326
for (; start < final; start++)
327327
{
328-
for (var i = 0; i < trimChars.Length; i++)
329-
if (value.GetRawStringData(start) == trimChars[i])
328+
var ch = value.GetRawStringData(start);
329+
330+
foreach (var trimChar in trimChars)
331+
if (ch == trimChar)
330332
goto MATCHED;
331333

332334
break;
@@ -417,8 +419,10 @@ public StringView TrimEnd(params ReadOnlySpan<char> trimChars)
417419
{
418420
for (; final >= start; final--)
419421
{
420-
for (var i = 0; i < trimChars.Length; i++)
421-
if (value.GetRawStringData(final) == trimChars[i])
422+
var ch = value.GetRawStringData(final);
423+
424+
foreach (var trimChar in trimChars)
425+
if (ch == trimChar)
422426
goto MATCHED;
423427

424428
break;
@@ -521,8 +525,10 @@ public StringView Trim(params ReadOnlySpan<char> trimChars)
521525
{
522526
for (; start <= final; start++)
523527
{
524-
for (var i = 0; i < trimChars.Length; i++)
525-
if (value.GetRawStringData(start) == trimChars[i])
528+
var ch = value.GetRawStringData(start);
529+
530+
foreach (var trimChar in trimChars)
531+
if (ch == trimChar)
526532
goto MATCHED;
527533

528534
break;
@@ -531,8 +537,10 @@ public StringView Trim(params ReadOnlySpan<char> trimChars)
531537

532538
for (; final > start; final--)
533539
{
534-
for (var i = 0; i < trimChars.Length; i++)
535-
if (value.GetRawStringData(final) == trimChars[i])
540+
var ch = value.GetRawStringData(final);
541+
542+
foreach (var trimChar in trimChars)
543+
if (ch == trimChar)
536544
goto MATCHED;
537545

538546
break;

0 commit comments

Comments
 (0)