Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perf regression in string handling / culture ICU #58029

Closed
performanceautofiler bot opened this issue Aug 24, 2021 · 24 comments
Closed

Perf regression in string handling / culture ICU #58029

performanceautofiler bot opened this issue Aug 24, 2021 · 24 comments

Comments

@performanceautofiler
Copy link

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ToLowerInvariant - Duration of single invocation 47.57 ns 52.14 ns 1.10 0.01 False
ToUpperInvariant - Duration of single invocation 14.22 ns 18.41 ns 1.29 0.11 False
ToUpperInvariant - Duration of single invocation 14.34 ns 19.17 ns 1.34 0.11 False
IndexerCheckPathLength - Duration of single invocation 146.05 ns 165.12 ns 1.13 0.07 False
Replace_Char - Duration of single invocation 4.37 ns 7.14 ns 1.63 0.17 False
Remove_IntInt - Duration of single invocation 10.73 ns 12.10 ns 1.13 0.16 False

graph
graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_String*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")


System.Tests.Perf_String.ToUpperInvariant(s: "TeSt")


System.Tests.Perf_String.ToUpperInvariant(s: "test")


System.Tests.Perf_String.IndexerCheckPathLength


System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')


System.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 0, i2: 8)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Formats.Cbor.Tests.Perf_CborReader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SkipValue - Duration of single invocation 60.73 ns 70.48 ns 1.16 0.11 False
SkipValue - Duration of single invocation 43.26 ns 49.98 ns 1.16 0.07 False

graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Formats.Cbor.Tests.Perf_CborReader*'

Payloads

Baseline
Compare

Histogram

System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Text String, Strict))


System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Byte String, Strict))


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Memory.ReadOnlySpan

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IndexOfString - Duration of single invocation 1.41 μs 1.52 μs 1.08 0.01 False
IndexOfString - Duration of single invocation 29.80 ns 35.54 ns 1.19 0.10 False
Trim - Duration of single invocation 7.18 ns 8.68 ns 1.21 0.02 False
IndexOfString - Duration of single invocation 26.32 ns 33.14 ns 1.26 0.03 False
IndexOfString - Duration of single invocation 18.71 ns 21.89 ns 1.17 0.08 False
IndexOfString - Duration of single invocation 26.23 ns 33.04 ns 1.26 0.03 False

graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Memory.ReadOnlySpan*'

Payloads

Baseline
Compare

Histogram

System.Memory.ReadOnlySpan.IndexOfString(input: "だ", value: "た", comparisonType: InvariantCulture)


System.Memory.ReadOnlySpan.IndexOfString(input: "More Test's", value: "Tests", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.Trim(input: " abcdefg ")


System.Memory.ReadOnlySpan.IndexOfString(input: "だだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだxだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだ", value: "x", comparisonType: Ordinal)


System.Memory.ReadOnlySpan.IndexOfString(input: "StrIng", value: "string", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.IndexOfString(input: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", value: "X", comparisonType: Ordinal)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.ContainsFalse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ICollection - Duration of single invocation 825.39 μs 899.29 μs 1.09 0.06 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.ContainsFalse&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsFalse<String>.ICollection(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_HashCode

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Add - Duration of single invocation 2.46 μs 3.07 μs 1.25 0.11 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_HashCode*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_HashCode.Add


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ArrayList - Duration of single invocation 3.02 μs 3.61 μs 1.19 0.17 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@kunalspathak kunalspathak changed the title [Perf] Changes at 8/17/2021 9:39:52 PM Perf regression in string handling / culture ICU Aug 24, 2021
@kunalspathak
Copy link
Member

Possibly introduced in #57078 and/or #57754

@kunalspathak kunalspathak transferred this issue from dotnet/perf-autofiling-issues Aug 24, 2021
@dotnet-issue-labeler dotnet-issue-labeler bot added area-System.Memory untriaged New issue has not been triaged by the area owner labels Aug 24, 2021
@ghost
Copy link

ghost commented Aug 24, 2021

Tagging subscribers to this area: @GrabYourPitchforks, @dotnet/area-system-memory
See info in area-owners.md if you want to be subscribed.

Issue Details

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ToLowerInvariant - Duration of single invocation 47.57 ns 52.14 ns 1.10 0.01 False
ToUpperInvariant - Duration of single invocation 14.22 ns 18.41 ns 1.29 0.11 False
ToUpperInvariant - Duration of single invocation 14.34 ns 19.17 ns 1.34 0.11 False
IndexerCheckPathLength - Duration of single invocation 146.05 ns 165.12 ns 1.13 0.07 False
Replace_Char - Duration of single invocation 4.37 ns 7.14 ns 1.63 0.17 False
Remove_IntInt - Duration of single invocation 10.73 ns 12.10 ns 1.13 0.16 False

graph
graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_String*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")


System.Tests.Perf_String.ToUpperInvariant(s: "TeSt")


System.Tests.Perf_String.ToUpperInvariant(s: "test")


System.Tests.Perf_String.IndexerCheckPathLength


System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')


System.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 0, i2: 8)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Formats.Cbor.Tests.Perf_CborReader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SkipValue - Duration of single invocation 60.73 ns 70.48 ns 1.16 0.11 False
SkipValue - Duration of single invocation 43.26 ns 49.98 ns 1.16 0.07 False

graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Formats.Cbor.Tests.Perf_CborReader*'

Payloads

Baseline
Compare

Histogram

System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Text String, Strict))


System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Byte String, Strict))


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Memory.ReadOnlySpan

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IndexOfString - Duration of single invocation 1.41 μs 1.52 μs 1.08 0.01 False
IndexOfString - Duration of single invocation 29.80 ns 35.54 ns 1.19 0.10 False
Trim - Duration of single invocation 7.18 ns 8.68 ns 1.21 0.02 False
IndexOfString - Duration of single invocation 26.32 ns 33.14 ns 1.26 0.03 False
IndexOfString - Duration of single invocation 18.71 ns 21.89 ns 1.17 0.08 False
IndexOfString - Duration of single invocation 26.23 ns 33.04 ns 1.26 0.03 False

graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Memory.ReadOnlySpan*'

Payloads

Baseline
Compare

Histogram

System.Memory.ReadOnlySpan.IndexOfString(input: "だ", value: "た", comparisonType: InvariantCulture)


System.Memory.ReadOnlySpan.IndexOfString(input: "More Test's", value: "Tests", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.Trim(input: " abcdefg ")


System.Memory.ReadOnlySpan.IndexOfString(input: "だだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだxだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだ", value: "x", comparisonType: Ordinal)


System.Memory.ReadOnlySpan.IndexOfString(input: "StrIng", value: "string", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.IndexOfString(input: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", value: "X", comparisonType: Ordinal)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.ContainsFalse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ICollection - Duration of single invocation 825.39 μs 899.29 μs 1.09 0.06 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.ContainsFalse&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsFalse<String>.ICollection(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_HashCode

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Add - Duration of single invocation 2.46 μs 3.07 μs 1.25 0.11 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_HashCode*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_HashCode.Add


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ArrayList - Duration of single invocation 3.02 μs 3.61 μs 1.19 0.17 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Author: performanceautofiler[bot]
Assignees: -
Labels:

area-System.Memory, untriaged

Milestone: -

@ghost
Copy link

ghost commented Aug 27, 2021

Tagging subscribers to this area: @tarekgh, @safern
See info in area-owners.md if you want to be subscribed.

Issue Details

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ToLowerInvariant - Duration of single invocation 47.57 ns 52.14 ns 1.10 0.01 False
ToUpperInvariant - Duration of single invocation 14.22 ns 18.41 ns 1.29 0.11 False
ToUpperInvariant - Duration of single invocation 14.34 ns 19.17 ns 1.34 0.11 False
IndexerCheckPathLength - Duration of single invocation 146.05 ns 165.12 ns 1.13 0.07 False
Replace_Char - Duration of single invocation 4.37 ns 7.14 ns 1.63 0.17 False
Remove_IntInt - Duration of single invocation 10.73 ns 12.10 ns 1.13 0.16 False

graph
graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_String*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_String.ToLowerInvariant(s: "This is a much longer piece of text that might benefit more from vectorization.")


System.Tests.Perf_String.ToUpperInvariant(s: "TeSt")


System.Tests.Perf_String.ToUpperInvariant(s: "test")


System.Tests.Perf_String.IndexerCheckPathLength


System.Tests.Perf_String.Replace_Char(text: "Hello", oldChar: 'a', newChar: 'b')


System.Tests.Perf_String.Remove_IntInt(s: "dzsdzsDDZSDZSDZSddsz", i1: 0, i2: 8)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

### Run Information
Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Formats.Cbor.Tests.Perf_CborReader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SkipValue - Duration of single invocation 60.73 ns 70.48 ns 1.16 0.11 False
SkipValue - Duration of single invocation 43.26 ns 49.98 ns 1.16 0.07 False

graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Formats.Cbor.Tests.Perf_CborReader*'

Payloads

Baseline
Compare

Histogram

System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Text String, Strict))


System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Byte String, Strict))


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Memory.ReadOnlySpan

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
IndexOfString - Duration of single invocation 1.41 μs 1.52 μs 1.08 0.01 False
IndexOfString - Duration of single invocation 29.80 ns 35.54 ns 1.19 0.10 False
Trim - Duration of single invocation 7.18 ns 8.68 ns 1.21 0.02 False
IndexOfString - Duration of single invocation 26.32 ns 33.14 ns 1.26 0.03 False
IndexOfString - Duration of single invocation 18.71 ns 21.89 ns 1.17 0.08 False
IndexOfString - Duration of single invocation 26.23 ns 33.04 ns 1.26 0.03 False

graph
graph
graph
graph
graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Memory.ReadOnlySpan*'

Payloads

Baseline
Compare

Histogram

System.Memory.ReadOnlySpan.IndexOfString(input: "だ", value: "た", comparisonType: InvariantCulture)


System.Memory.ReadOnlySpan.IndexOfString(input: "More Test's", value: "Tests", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.Trim(input: " abcdefg ")


System.Memory.ReadOnlySpan.IndexOfString(input: "だだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだxだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだだ", value: "x", comparisonType: Ordinal)


System.Memory.ReadOnlySpan.IndexOfString(input: "StrIng", value: "string", comparisonType: OrdinalIgnoreCase)


System.Memory.ReadOnlySpan.IndexOfString(input: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", value: "X", comparisonType: Ordinal)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.ContainsFalse<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ICollection - Duration of single invocation 825.39 μs 899.29 μs 1.09 0.06 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.ContainsFalse&lt;String&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.ContainsFalse<String>.ICollection(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Tests.Perf_HashCode

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Add - Duration of single invocation 2.46 μs 3.07 μs 1.25 0.11 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Tests.Perf_HashCode*'

Payloads

Baseline
Compare

Histogram

System.Tests.Perf_HashCode.Add


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.19042
Baseline bbf4e797a13984acee37b19d0a79217188824301
Compare a53ec50f18af59d864d582d561165ac21ea25089
Diff Diff

Regressions in System.Collections.IterateForEachNonGeneric<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ArrayList - Duration of single invocation 3.02 μs 3.61 μs 1.19 0.17 False

graph
Historical Data in Reporting System

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter 'System.Collections.IterateForEachNonGeneric&lt;Int32&gt;*'

Payloads

Baseline
Compare

Histogram

System.Collections.IterateForEachNonGeneric<Int32>.ArrayList(Size: 512)


Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Author: performanceautofiler[bot]
Assignees: -
Labels:

area-System.Globalization, untriaged

Milestone: -

@adamsitnik
Copy link
Member

I am not convinced that there is an actual regression.

image

image

image

image

image

image

Since #57078 and #57754 were important bug-fixes that might even be backported to older releases I think we should close the issue.

@kunalspathak
Copy link
Member

kunalspathak commented Aug 27, 2021

@adamsitnik - I agree that not all benchmarks listed here have regressed because of the changes, but there are some that clearly shows regression.

https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows%2010.0.19042/amd/System.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.html

image

I also realized few days back that we are not consistent in checking the test history on different xarch hardware:

On Windows.10.Amd64.20H2.Owl.Perf, here is the graph taken from https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_Windows%2010.0.19042%2famd%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0.html

image

On Windows.10.Amd64.19H1.Tiger.Perf, here is the graph taken from https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_Windows%2010.0.18362%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0.html

image

The spike on Windows.10.Amd64.20H2.Owl.Perf clearly shows the commit range of 53cafdd...5d930bd where #57754 was one of them.

@kunalspathak
Copy link
Member

@kunalspathak
Copy link
Member

Pinging here to make sure that it doesn't get lost.

@danmoseley danmoseley added this to the 6.0.0 milestone Aug 31, 2021
@danmoseley
Copy link
Member

Setting milestone just so it's on the radar in case there is something 6.0 here. Feel free to move if appropriate.

@danmoseley danmoseley reopened this Aug 31, 2021
@tarekgh
Copy link
Member

tarekgh commented Aug 31, 2021

@kunalspathak just to mention, ReadOnlySpan.IndexOfString("AAAAAAAA...") is using Invariant culture and #57754 would affect only culture creation which not used with Invariant. So, this is very unlikely to be the culprit change. Also, the used string is ASCII which should be optimized in such call with the invariant culture. #57078 unlikely be the one regressed this test too.

Looking at 53cafdd...5d930bd I am not seeing any other change that can cause that. The only explanation is somehow such test include some culture creation path which add to the numbers here. @adamsitnik is it possible?

@tarekgh tarekgh removed the untriaged New issue has not been triaged by the area owner label Aug 31, 2021
@kunalspathak
Copy link
Member

I can't think of any other change that might impact it. #56501 deals with floats/doubles so unlikely that it would have an impact. Since the change in #57754 is windows only, I checked the Ubuntu graph and it doesn't seem to have affected. See https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_ubuntu%2018.04%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.html

The windows graph seems to have one lower point around August 27th, but we don't have data beyond that. @DrewScoggins .
https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_Windows%2010.0.19042%2famd%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.html

Were you able to repro this on you local machine? What happens if you try to repro by reverting one of the changes?

@tarekgh
Copy link
Member

tarekgh commented Aug 31, 2021

Without #57754 Changes

|        Method |                                input |   value |             comparisonType |        Mean |     Error |    StdDev |    Median |       Min |         Max | Allocated |
|-------------- |------------------------------------- |-------- |--------------------------- |------------:|----------:|----------:|----------:|----------:|------------:|----------:|
| IndexOfString |                           AAAAA5AAAA |       5 |           InvariantCulture |    37.69 ns |  1.444 ns |  1.663 ns |  37.10 ns |  35.66 ns |    41.33 ns |         - |
| IndexOfString | AAAAAAAAAAAA(...)AAAAAAAAAAAA [1000] |       X |                    Ordinal |    28.67 ns |  0.435 ns |  0.386 ns |  28.56 ns |  28.27 ns |    29.46 ns |         - |
| IndexOfString |  AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] |       x | InvariantCultureIgnoreCase |   195.33 ns |  3.982 ns |  4.585 ns | 193.06 ns | 191.28 ns |   206.53 ns |         - |
| IndexOfString |  AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] |       x |          OrdinalIgnoreCase |   216.83 ns |  1.971 ns |  1.646 ns | 216.31 ns | 215.01 ns |   219.73 ns |         - |
| IndexOfString |                                ABCDE |       c | InvariantCultureIgnoreCase |    32.16 ns |  0.736 ns |  0.818 ns |  31.84 ns |  31.23 ns |    33.70 ns |         - |
| IndexOfString |  Hello Worldb(...)allylong!xyz [186] |       w |          OrdinalIgnoreCase |    27.99 ns |  0.422 ns |  0.395 ns |  27.95 ns |  27.48 ns |    28.61 ns |         - |
| IndexOfString |  Hello Worldb(...)allylong!xyz [187] |       ~ |                    Ordinal |    20.29 ns |  0.408 ns |  0.436 ns |  20.11 ns |  19.90 ns |    21.35 ns |         - |
| IndexOfString | Hello Worldbb(...)bbbbbbbbbbba! [47] |       y |                    Ordinal |    14.85 ns |  0.475 ns |  0.547 ns |  14.85 ns |  14.18 ns |    16.31 ns |         - |
| IndexOfString |                          More Test's |   Tests |          OrdinalIgnoreCase |    33.47 ns |  0.751 ns |  0.834 ns |  32.94 ns |  32.76 ns |    35.30 ns |         - |
| IndexOfString |                               StrIng |  string |          OrdinalIgnoreCase |    20.17 ns |  0.741 ns |  0.823 ns |  19.79 ns |  19.37 ns |    21.93 ns |         - |
| IndexOfString |                         foobardzsdzs |   rddzs |           InvariantCulture |    45.21 ns |  1.176 ns |  1.354 ns |  45.06 ns |  43.67 ns |    47.79 ns |         - |
| IndexOfString |                              string1 | string2 |           InvariantCulture |    38.92 ns |  0.894 ns |  1.030 ns |  38.50 ns |  37.96 ns |    40.97 ns |         - |
| IndexOfString |                                    ? |       ? |           InvariantCulture | 1,005.37 ns | 19.451 ns | 19.103 ns | 998.66 ns | 983.00 ns | 1,043.36 ns |         - |
| IndexOfString |  ????????????(...)???????????? [100] |       ? |                    Ordinal |    15.83 ns |  0.511 ns |  0.588 ns |  15.80 ns |  15.16 ns |    17.25 ns |         - |
| IndexOfString | ????????????(...)???????????? [1000] |       x |                    Ordinal |    29.16 ns |  0.711 ns |  0.818 ns |  28.81 ns |  28.30 ns |    31.04 ns |         - |

With #57754 Changes

|        Method |                                input |   value |             comparisonType |        Mean |     Error |    StdDev |      Median |         Min |         Max | Allocated |
|-------------- |------------------------------------- |-------- |--------------------------- |------------:|----------:|----------:|------------:|------------:|------------:|----------:|
| IndexOfString |                           AAAAA5AAAA |       5 |           InvariantCulture |    38.28 ns |  2.180 ns |  2.510 ns |    37.74 ns |    35.46 ns |    44.87 ns |         - |
| IndexOfString | AAAAAAAAAAAA(...)AAAAAAAAAAAA [1000] |       X |                    Ordinal |    30.22 ns |  0.776 ns |  0.894 ns |    30.07 ns |    29.07 ns |    32.46 ns |         - |
| IndexOfString |  AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] |       x | InvariantCultureIgnoreCase |   194.21 ns |  3.856 ns |  3.959 ns |   192.41 ns |   190.58 ns |   203.36 ns |         - |
| IndexOfString |  AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] |       x |          OrdinalIgnoreCase |   217.70 ns |  2.932 ns |  2.743 ns |   216.56 ns |   215.28 ns |   223.83 ns |         - |
| IndexOfString |                                ABCDE |       c | InvariantCultureIgnoreCase |    32.54 ns |  0.439 ns |  0.389 ns |    32.36 ns |    32.15 ns |    33.24 ns |         - |
| IndexOfString |  Hello Worldb(...)allylong!xyz [186] |       w |          OrdinalIgnoreCase |    27.96 ns |  0.542 ns |  0.480 ns |    27.85 ns |    27.48 ns |    28.81 ns |         - |
| IndexOfString |  Hello Worldb(...)allylong!xyz [187] |       ~ |                    Ordinal |    20.21 ns |  0.675 ns |  0.778 ns |    20.02 ns |    19.36 ns |    21.74 ns |         - |
| IndexOfString | Hello Worldbb(...)bbbbbbbbbbba! [47] |       y |                    Ordinal |    14.10 ns |  0.153 ns |  0.120 ns |    14.05 ns |    13.98 ns |    14.34 ns |         - |
| IndexOfString |                          More Test's |   Tests |          OrdinalIgnoreCase |    33.22 ns |  0.591 ns |  0.553 ns |    32.89 ns |    32.77 ns |    34.49 ns |         - |
| IndexOfString |                               StrIng |  string |          OrdinalIgnoreCase |    19.72 ns |  0.358 ns |  0.317 ns |    19.58 ns |    19.39 ns |    20.46 ns |         - |
| IndexOfString |                         foobardzsdzs |   rddzs |           InvariantCulture |    44.60 ns |  0.878 ns |  0.976 ns |    44.59 ns |    43.47 ns |    46.59 ns |         - |
| IndexOfString |                              string1 | string2 |           InvariantCulture |    38.68 ns |  0.782 ns |  0.837 ns |    38.35 ns |    37.88 ns |    40.74 ns |         - |
| IndexOfString |                                    ? |       ? |           InvariantCulture | 1,017.38 ns | 16.815 ns | 14.906 ns | 1,013.09 ns | 1,002.89 ns | 1,055.40 ns |         - |
| IndexOfString |  ????????????(...)???????????? [100] |       ? |                    Ordinal |    15.28 ns |  0.277 ns |  0.246 ns |    15.16 ns |    15.04 ns |    15.78 ns |         - |
| IndexOfString | ????????????(...)???????????? [1000] |       x |                    Ordinal |    28.88 ns |  0.387 ns |  0.362 ns |    28.79 ns |    28.50 ns |    29.79 ns |         - |

Diff

❯ dotnet run --base "C:\results\before" --diff "C:\results\after" --threshold 2%
summary:
better: 1, geomean: 1.057
worse: 1, geomean: 1.053
total diff: 2

| Slower                                                                           | diff/base | Base Median (ns) | Diff Median (ns) | Modality|
| -------------------------------------------------------------------------------- | ---------:| ----------------:| ----------------:| ------- |
| System.Memory.ReadOnlySpan.IndexOfString(input: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |      1.05 |            28.56 |            30.07 | bimodal |

| Faster                                                                           | base/diff | Base Median (ns) | Diff Median (ns) | Modality|
| -------------------------------------------------------------------------------- | ---------:| ----------------:| ----------------:| -------:|
| System.Memory.ReadOnlySpan.IndexOfString(input: "Hello Worldbbbbbbbbbbbbbbcbbbbb |      1.06 |            14.85 |            14.05 |         |

I am not seeing any significant regression caused by #57754.

@danmoseley
Copy link
Member

Looking at your [first URL ](https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_Windows%2010.0.19042%2famd%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0.html) Kunal -- did it fix itself? I'm not sure if I'm looking at the right graph:
image

@kunalspathak
Copy link
Member

Looking at the recernt graph, it looks like we are back to the pre-regression value. I tried checking what might have caused the improvement and the changes 327b9c2...b1ae7b9 doesn't seem to have improved this benchmark.

https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x64_Windows%2010.0.19042/amd/System.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.html

image

https://pvscmdupload.blob.core.windows.net/reports/allTestHistory%2frefs%2fheads%2fmain_x64_Windows%2010.0.19042%2famd%2fSystem.Memory.ReadOnlySpan.IndexOfString(input%3a%20%22%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0%e3%81%a0.html

image

I am also surprise to see the 2 graphs of different benchmarks looking identical. At this point, I am not sure if this is a bimodal behavior, but I think it should be safe to close this issue.

@danmoseley
Copy link
Member

Oh we looked at the same thing together. Yes, I see nothing plausible in 327b9c2...b1ae7b9

I agree there is not clear evidence of a problem. Longer term we should investigate why it is bimodal -- isn't this just the kind of benchmark that can be alignment sensitive (code or data)?

@danmoseley
Copy link
Member

But why would it be consistent for a week, then consistently different for a week -- can you think of a reason?

@kunalspathak
Copy link
Member

I agree there is not clear evidence of a problem. Longer term we should investigate why it is bimodal -- isn't this just the kind of benchmark that can be alignment sensitive (code or data)?

After looking at the benchmark code, this benchmark doesn't seem realistic at all. It has 16 back to back calls to ReadOnlySpan<string>.IndexOf() and while it might be the case that IndexOf() didn't regress but the benchmark code might have although there is no evidence in the commit range to say why the benchmark code would have regressed.

But why would it be consistent for a week, then consistently different for a week -- can you think of a reason?

We do allocate long string to feed as input to the benchmark at https://github.com/dotnet/performance/blob/d7dac8a7ca12a28d099192f8a901cf8e30361384/src/benchmarks/micro/libraries/System.Memory/ReadOnlySpan.cs#L96. So data alignment could be one possibility, but I can't think of any other reason. Looking at the past history, that seems to be more obvious reason.

@danmoseley
Copy link
Member

Right, but how does data alignment stay consistent for a period of a week? Is it just new code being written, causing the GC to eg., start allocating a new block just before or just after (waving hands)? Just wasn't aware that could happen. @adamsitnik ?

@kunalspathak
Copy link
Member

alignment sensitive (code or data)?

I don't believe it will be code alignment because if there was a sensitive loop, we would have aligned it already even though there was C# code change around that loop. Now, from the commit range, it doesn't look to be the case. For other cases, if there was a sensitive loop and we didn't align it because of heuristics, then that would be something to look at.

@danmoseley
Copy link
Member

Do we have sample code for allocating an aligned char[] ? Eg., something silly like keep allocating in a loop until it's aligned, newing up some tiny other thing in the loop?

then we can try aligning it and see what happens https://github.com/dotnet/performance/blob/d7dac8a7ca12a28d099192f8a901cf8e30361384/src/benchmarks/micro/libraries/System.Memory/ReadOnlySpan.cs#L98

@kunalspathak
Copy link
Member

Do we have sample code for allocating an aligned char[] ?

Not that I know of, but that's the whole point of memory randomization added in dotnet/BenchmarkDotNet#1587. It will allocate random memory that may or may not be aligned and we can then see how many buckets the measurements fall under to clearly tell if it is affected by data alignment.

@danmoseley
Copy link
Member

Is that randomization feature enabled in these runs? (should I see a hit on 'memoryRandomization' in the perf repo?)

@kunalspathak
Copy link
Member

You should be able to run benchmark by passing --memoryRandomization true --outliers DontRemove to benchmark runs in order to take advantage of memory randomization.

@tarekgh
Copy link
Member

tarekgh commented Aug 31, 2021

Considering the latest shows, no regression, I am closing this issue. Feel free to continue the discussion and investigation. I spent some more time to synchronize to different commits but no luck at all.

@tarekgh tarekgh closed this as completed Aug 31, 2021
@adamsitnik
Copy link
Member

I've run these benchmarks with memory randomization enabled:

git clone https://github.com/dotnet/performance.git performance
py .\performance\scripts\benchmarks_ci.py -f net6.0 --filter *IndexOfString --bdn-arguments "--memoryRandomization true --minIterationCount 100 --maxIterationCount 101 --outliers dontRemove"

It seems that none of them has a flat distrubution. This is what I got on Windows x64 AMD machine:

 // * Detailed results *
 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=AAAAA5AAAA, value=5, comparisonType=InvariantCulture]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 35.055 ns, StdErr = 0.040 ns (0.11%), N = 100, StdDev = 0.401 ns
 Min = 34.328 ns, Q1 = 34.885 ns, Median = 34.923 ns, Q3 = 35.190 ns, Max = 37.281 ns
 IQR = 0.305 ns, LowerFence = 34.428 ns, UpperFence = 35.647 ns
 ConfidenceInterval = [34.919 ns; 35.191 ns] (CI 99.9%), Margin = 0.136 ns (0.39% of Mean)
 Skewness = 2.15, Kurtosis = 11.41, MValue = 2
 -------------------- Histogram --------------------
 [34.215 ns ; 35.330 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [35.330 ns ; 36.275 ns) | @@@@@@@@@@@@@@@@@
 [36.275 ns ; 37.395 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=AAAAAAAAAAAA(...)AAAAAAAAAAAA [1000], value=X, comparisonType=Ordinal]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 23.627 ns, StdErr = 0.039 ns (0.16%), N = 100, StdDev = 0.387 ns
 Min = 22.811 ns, Q1 = 23.375 ns, Median = 23.604 ns, Q3 = 23.813 ns, Max = 25.614 ns
 IQR = 0.438 ns, LowerFence = 22.718 ns, UpperFence = 24.470 ns
 ConfidenceInterval = [23.496 ns; 23.758 ns] (CI 99.9%), Margin = 0.131 ns (0.55% of Mean)
 Skewness = 1.53, Kurtosis = 8.95, MValue = 2
 -------------------- Histogram --------------------
 [22.701 ns ; 23.191 ns) | @@@@@@@@@@
 [23.191 ns ; 24.069 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [24.069 ns ; 24.570 ns) | @@@@@
 [24.570 ns ; 25.066 ns) | @
 [25.066 ns ; 25.724 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=AAAAAAAAAAAA(...)AAAAAAAAAAAA [100], value=x, comparisonType=InvariantCultureIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 173.786 ns, StdErr = 0.610 ns (0.35%), N = 100, StdDev = 6.097 ns
 Min = 168.731 ns, Q1 = 171.238 ns, Median = 172.594 ns, Q3 = 174.552 ns, Max = 215.606 ns
 IQR = 3.314 ns, LowerFence = 166.268 ns, UpperFence = 179.522 ns
 ConfidenceInterval = [171.718 ns; 175.854 ns] (CI 99.9%), Margin = 2.068 ns (1.19% of Mean)
 Skewness = 4.78, Kurtosis = 29.71, MValue = 2
 -------------------- Histogram --------------------
 [167.006 ns ; 173.430 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [173.430 ns ; 179.300 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [179.300 ns ; 185.330 ns) | @@
 [185.330 ns ; 191.233 ns) | @
 [191.233 ns ; 198.130 ns) |
 [198.130 ns ; 203.073 ns) |
 [203.073 ns ; 207.175 ns) | @
 [207.175 ns ; 217.330 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=AAAAAAAAAAAA(...)AAAAAAAAAAAA [100], value=x, comparisonType=OrdinalIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 150.273 ns, StdErr = 0.243 ns (0.16%), N = 100, StdDev = 2.435 ns
 Min = 146.616 ns, Q1 = 148.677 ns, Median = 150.080 ns, Q3 = 151.492 ns, Max = 162.180 ns
 IQR = 2.816 ns, LowerFence = 144.454 ns, UpperFence = 155.716 ns
 ConfidenceInterval = [149.447 ns; 151.098 ns] (CI 99.9%), Margin = 0.826 ns (0.55% of Mean)
 Skewness = 1.34, Kurtosis = 7.24, MValue = 2
 -------------------- Histogram --------------------
 [145.928 ns ; 151.390 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [151.390 ns ; 155.912 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@
 [155.912 ns ; 162.869 ns) | @@
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=ABCDE, value=c, comparisonType=InvariantCultureIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 32.221 ns, StdErr = 0.056 ns (0.17%), N = 100, StdDev = 0.560 ns
 Min = 31.250 ns, Q1 = 31.848 ns, Median = 32.156 ns, Q3 = 32.549 ns, Max = 35.375 ns
 IQR = 0.701 ns, LowerFence = 30.796 ns, UpperFence = 33.601 ns
 ConfidenceInterval = [32.031 ns; 32.411 ns] (CI 99.9%), Margin = 0.190 ns (0.59% of Mean)
 Skewness = 1.92, Kurtosis = 11.39, MValue = 2
 -------------------- Histogram --------------------
 [31.092 ns ; 32.159 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [32.159 ns ; 33.145 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [33.145 ns ; 34.037 ns) | @@
 [34.037 ns ; 35.533 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=Hello Worldb(...)allylong!xyz [186], value=w, comparisonType=OrdinalIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 20.566 ns, StdErr = 0.016 ns (0.08%), N = 100, StdDev = 0.157 ns
 Min = 20.418 ns, Q1 = 20.497 ns, Median = 20.536 ns, Q3 = 20.572 ns, Max = 21.662 ns
 IQR = 0.075 ns, LowerFence = 20.384 ns, UpperFence = 20.685 ns
 ConfidenceInterval = [20.513 ns; 20.619 ns] (CI 99.9%), Margin = 0.053 ns (0.26% of Mean)
 Skewness = 4.13, Kurtosis = 26.08, MValue = 2
 -------------------- Histogram --------------------
 [20.373 ns ; 21.207 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [21.207 ns ; 21.707 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=Hello Worldb(...)allylong!xyz [187], value=~, comparisonType=Ordinal]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 17.207 ns, StdErr = 0.049 ns (0.29%), N = 100, StdDev = 0.495 ns
 Min = 16.688 ns, Q1 = 16.852 ns, Median = 17.014 ns, Q3 = 17.495 ns, Max = 19.593 ns
 IQR = 0.643 ns, LowerFence = 15.888 ns, UpperFence = 18.459 ns
 ConfidenceInterval = [17.039 ns; 17.374 ns] (CI 99.9%), Margin = 0.168 ns (0.98% of Mean)
 Skewness = 1.68, Kurtosis = 7.13, MValue = 2.35
 -------------------- Histogram --------------------
 [16.672 ns ; 17.320 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [17.320 ns ; 17.776 ns) | @@@@@@@@@@@@@@@@@@@@
 [17.776 ns ; 18.449 ns) | @@@@@@@@@@
 [18.449 ns ; 18.998 ns) | @
 [18.998 ns ; 19.733 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=Hello Worldbb(...)bbbbbbbbbbba! [47], value=y, comparisonType=Ordinal]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 12.711 ns, StdErr = 0.073 ns (0.57%), N = 100, StdDev = 0.725 ns
 Min = 12.022 ns, Q1 = 12.437 ns, Median = 12.566 ns, Q3 = 12.807 ns, Max = 18.097 ns
 IQR = 0.370 ns, LowerFence = 11.881 ns, UpperFence = 13.362 ns
 ConfidenceInterval = [12.465 ns; 12.957 ns] (CI 99.9%), Margin = 0.246 ns (1.94% of Mean)
 Skewness = 4.76, Kurtosis = 32.68, MValue = 2
 -------------------- Histogram --------------------
 [12.009 ns ; 12.423 ns) | @@@@@@@@@@@@@@@@@@@@@
 [12.423 ns ; 12.833 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [12.833 ns ; 13.401 ns) | @@@@@@@@@@@
 [13.401 ns ; 13.811 ns) | @@@@@
 [13.811 ns ; 14.285 ns) | @
 [14.285 ns ; 14.695 ns) | @
 [14.695 ns ; 15.109 ns) |
 [15.109 ns ; 15.520 ns) | @
 [15.520 ns ; 15.930 ns) |
 [15.930 ns ; 16.340 ns) |
 [16.340 ns ; 16.750 ns) |
 [16.750 ns ; 17.160 ns) |
 [17.160 ns ; 17.570 ns) |
 [17.570 ns ; 17.892 ns) |
 [17.892 ns ; 18.302 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=More Test's, value=Tests, comparisonType=OrdinalIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 25.799 ns, StdErr = 0.122 ns (0.47%), N = 100, StdDev = 1.215 ns
 Min = 25.071 ns, Q1 = 25.262 ns, Median = 25.394 ns, Q3 = 25.778 ns, Max = 32.241 ns
 IQR = 0.516 ns, LowerFence = 24.487 ns, UpperFence = 26.553 ns
 ConfidenceInterval = [25.387 ns; 26.211 ns] (CI 99.9%), Margin = 0.412 ns (1.60% of Mean)
 Skewness = 3.61, Kurtosis = 17.26, MValue = 2
 -------------------- Histogram --------------------
 [24.728 ns ; 25.816 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [25.816 ns ; 26.536 ns) | @@@@@@@@@@@@
 [26.536 ns ; 27.189 ns) | @
 [27.189 ns ; 27.877 ns) | @@@
 [27.877 ns ; 28.601 ns) |
 [28.601 ns ; 29.288 ns) | @@
 [29.288 ns ; 30.542 ns) | @
 [30.542 ns ; 31.230 ns) |
 [31.230 ns ; 31.844 ns) |
 [31.844 ns ; 32.584 ns) | @@
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=StrIng, value=string, comparisonType=OrdinalIgnoreCase]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 15.615 ns, StdErr = 0.050 ns (0.32%), N = 100, StdDev = 0.496 ns
 Min = 15.401 ns, Q1 = 15.464 ns, Median = 15.491 ns, Q3 = 15.600 ns, Max = 20.030 ns
 IQR = 0.135 ns, LowerFence = 15.261 ns, UpperFence = 15.803 ns
 ConfidenceInterval = [15.446 ns; 15.783 ns] (CI 99.9%), Margin = 0.168 ns (1.08% of Mean)
 Skewness = 7.31, Kurtosis = 63.32, MValue = 2
 -------------------- Histogram --------------------
 [15.376 ns ; 15.974 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [15.974 ns ; 16.543 ns) | @@@
 [16.543 ns ; 17.173 ns) | @
 [17.173 ns ; 17.735 ns) |
 [17.735 ns ; 18.296 ns) |
 [18.296 ns ; 18.857 ns) |
 [18.857 ns ; 19.419 ns) |
 [19.419 ns ; 20.170 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=foobardzsdzs, value=rddzs, comparisonType=InvariantCulture]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 41.283 ns, StdErr = 0.067 ns (0.16%), N = 100, StdDev = 0.675 ns
 Min = 40.456 ns, Q1 = 40.959 ns, Median = 41.150 ns, Q3 = 41.431 ns, Max = 46.224 ns
 IQR = 0.472 ns, LowerFence = 40.252 ns, UpperFence = 42.138 ns
 ConfidenceInterval = [41.055 ns; 41.512 ns] (CI 99.9%), Margin = 0.229 ns (0.55% of Mean)
 Skewness = 4.27, Kurtosis = 30, MValue = 2
 -------------------- Histogram --------------------
 [40.265 ns ; 41.452 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [41.452 ns ; 42.704 ns) | @@@@@@@@@@@@@@@@@@@@@
 [42.704 ns ; 43.736 ns) | @
 [43.736 ns ; 44.882 ns) |
 [44.882 ns ; 46.415 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=string1, value=string2, comparisonType=InvariantCulture]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 35.777 ns, StdErr = 0.051 ns (0.14%), N = 100, StdDev = 0.506 ns
 Min = 35.343 ns, Q1 = 35.432 ns, Median = 35.675 ns, Q3 = 35.919 ns, Max = 38.940 ns
 IQR = 0.487 ns, LowerFence = 34.701 ns, UpperFence = 36.650 ns
 ConfidenceInterval = [35.605 ns; 35.949 ns] (CI 99.9%), Margin = 0.172 ns (0.48% of Mean)
 Skewness = 3.43, Kurtosis = 19.36, MValue = 2
 -------------------- Histogram --------------------
 [35.200 ns ; 36.335 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [36.335 ns ; 37.534 ns) | @@@@
 [37.534 ns ; 39.083 ns) | @@
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=?, value=?, comparisonType=InvariantCulture]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 1.188 us, StdErr = 0.002 us (0.13%), N = 100, StdDev = 0.015 us
 Min = 1.152 us, Q1 = 1.179 us, Median = 1.190 us, Q3 = 1.198 us, Max = 1.229 us
 IQR = 0.019 us, LowerFence = 1.151 us, UpperFence = 1.227 us
 ConfidenceInterval = [1.183 us; 1.193 us] (CI 99.9%), Margin = 0.005 us (0.43% of Mean)
 Skewness = -0.14, Kurtosis = 3.05, MValue = 2
 -------------------- Histogram --------------------
 [1.148 us ; 1.176 us) | @@@@@@@@@@@@@@@@@@@
 [1.176 us ; 1.234 us) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=????????????(...)???????????? [100], value=?, comparisonType=Ordinal]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 13.372 ns, StdErr = 0.014 ns (0.10%), N = 100, StdDev = 0.137 ns
 Min = 13.154 ns, Q1 = 13.294 ns, Median = 13.328 ns, Q3 = 13.444 ns, Max = 14.211 ns
 IQR = 0.149 ns, LowerFence = 13.071 ns, UpperFence = 13.668 ns
 ConfidenceInterval = [13.326 ns; 13.419 ns] (CI 99.9%), Margin = 0.047 ns (0.35% of Mean)
 Skewness = 2.54, Kurtosis = 15.07, MValue = 2
 -------------------- Histogram --------------------
 [13.115 ns ; 13.425 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [13.425 ns ; 13.736 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [13.736 ns ; 14.250 ns) | @
 ---------------------------------------------------

 ReadOnlySpan.IndexOfString: Job-NKYPYP(OutlierMode=DontRemove, PowerPlanMode=00000000-0000-0000-0000-000000000000, Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog, IterationTime=250.0000 ms, MaxIterationCount=101, MemoryRandomization=True, MinIterationCount=100, WarmupCount=1) [input=????????????(...)???????????? [1000], value=x, comparisonType=Ordinal]
 Runtime = .NET 6.0.0 (6.0.21.41701), X64 RyuJIT; GC = Concurrent Workstation
 Mean = 23.281 ns, StdErr = 0.070 ns (0.30%), N = 100, StdDev = 0.699 ns
 Min = 22.640 ns, Q1 = 22.893 ns, Median = 23.171 ns, Q3 = 23.386 ns, Max = 27.660 ns
 IQR = 0.493 ns, LowerFence = 22.153 ns, UpperFence = 24.126 ns
 ConfidenceInterval = [23.044 ns; 23.518 ns] (CI 99.9%), Margin = 0.237 ns (1.02% of Mean)
 Skewness = 3.56, Kurtosis = 19.7, MValue = 2
 -------------------- Histogram --------------------
 [22.442 ns ; 23.274 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [23.274 ns ; 24.082 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 [24.082 ns ; 24.975 ns) | @@@
 [24.975 ns ; 25.534 ns) | @
 [25.534 ns ; 26.494 ns) | @
 [26.494 ns ; 27.858 ns) | @
 ---------------------------------------------------

 // * Summary *

 BenchmarkDotNet=v0.13.1.1603-nightly, OS=Windows 10.0.19043.1165 (21H1/May2021Update)
 AMD Ryzen Threadripper PRO 3945WX 12-Cores, 1 CPU, 24 logical and 12 physical cores
 .NET SDK=6.0.100-rc.1.21417.19
   [Host]     : .NET 6.0.0 (6.0.21.41701), X64 RyuJIT
   Job-NKYPYP : .NET 6.0.0 (6.0.21.41701), X64 RyuJIT

 OutlierMode=DontRemove  PowerPlanMode=00000000-0000-0000-0000-000000000000  Arguments=/p:DebugType=portable,-bl:benchmarkdotnet.binlog
 IterationTime=250.0000 ms  MaxIterationCount=101  MemoryRandomization=True
 MinIterationCount=100  WarmupCount=1
Method input value comparisonType Mean Error StdDev Median Min Max Allocated
IndexOfString AAAAA5AAAA 5 InvariantCulture 35.06 ns 0.136 ns 0.401 ns 34.92 ns 34.33 ns 37.28 ns -
IndexOfString AAAAAAAAAAAA(...)AAAAAAAAAAAA [1000] X Ordinal 23.63 ns 0.131 ns 0.387 ns 23.60 ns 22.81 ns 25.61 ns -
IndexOfString AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] x InvariantCultureIgnoreCase 173.79 ns 2.068 ns 6.097 ns 172.59 ns 168.73 ns 215.61 ns -
IndexOfString AAAAAAAAAAAA(...)AAAAAAAAAAAA [100] x OrdinalIgnoreCase 150.27 ns 0.826 ns 2.435 ns 150.08 ns 146.62 ns 162.18 ns -
IndexOfString ABCDE c InvariantCultureIgnoreCase 32.22 ns 0.190 ns 0.560 ns 32.16 ns 31.25 ns 35.38 ns -
IndexOfString Hello Worldb(...)allylong!xyz [186] w OrdinalIgnoreCase 20.57 ns 0.053 ns 0.157 ns 20.54 ns 20.42 ns 21.66 ns -
IndexOfString Hello Worldb(...)allylong!xyz [187] ~ Ordinal 17.21 ns 0.168 ns 0.495 ns 17.01 ns 16.69 ns 19.59 ns -
IndexOfString Hello Worldbb(...)bbbbbbbbbbba! [47] y Ordinal 12.71 ns 0.246 ns 0.725 ns 12.57 ns 12.02 ns 18.10 ns -
IndexOfString More Test's Tests OrdinalIgnoreCase 25.80 ns 0.412 ns 1.215 ns 25.39 ns 25.07 ns 32.24 ns -
IndexOfString StrIng string OrdinalIgnoreCase 15.61 ns 0.168 ns 0.496 ns 15.49 ns 15.40 ns 20.03 ns -
IndexOfString foobardzsdzs rddzs InvariantCulture 41.28 ns 0.229 ns 0.675 ns 41.15 ns 40.46 ns 46.22 ns -
IndexOfString string1 string2 InvariantCulture 35.78 ns 0.172 ns 0.506 ns 35.68 ns 35.34 ns 38.94 ns -
IndexOfString ? ? InvariantCulture 1,188.17 ns 5.145 ns 15.170 ns 1,189.50 ns 1,152.17 ns 1,229.38 ns -
IndexOfString ????????????(...)???????????? [100] ? Ordinal 13.37 ns 0.047 ns 0.137 ns 13.33 ns 13.15 ns 14.21 ns -
IndexOfString ????????????(...)???????????? [1000] x Ordinal 23.28 ns 0.237 ns 0.699 ns 23.17 ns 22.64 ns 27.66 ns -

@ghost ghost locked as resolved and limited conversation to collaborators Oct 1, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants