I've identified multiple globalization benchmarks that are few times slower compared to .NET, but only on Windows.
Examples:
Details
System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options: (en-US, IgnoreNonSpace, False))
| Result | Base | Diff | Ratio | Alloc Delta | Operating System | Bit | Processor Name | Modality |
|---|
| Slower | 574.96 | 6346.39 | 0.09 | +0 | Windows 10 | Arm64 | Microsoft SQ1 3.0 GHz | |
| Slower | 512.44 | 3951.29 | 0.13 | +0 | Windows 10 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | |
| Slower | 343.58 | 3359.13 | 0.10 | +0 | Windows 11 | X64 | AMD Ryzen Threadripper PRO 3945WX 12-Cores | |
| Same | 397.41 | 422.80 | 0.94 | +0 | ubuntu 18.04 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | |
| Slower | 419.87 | 486.70 | 0.86 | +0 | macOS Monterey 12.2.1 | X64 | Intel Core i7-5557U CPU 3.10GHz (Broadwell) | |
System.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (pl-PL, None))
| Result | Base | Diff | Ratio | Alloc Delta | Operating System | Bit | Processor Name | Modality |
|---|
| Slower | 1069.98 | 30836.45 | 0.03 | +0 | Windows 10 | Arm64 | Microsoft SQ1 3.0 GHz | |
| Slower | 579.14 | 21694.46 | 0.03 | +0 | Windows 10 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | |
| Slower | 736.95 | 17273.03 | 0.04 | +0 | Windows 11 | X64 | AMD Ryzen Threadripper PRO 3945WX 12-Cores | |
| Same | 611.26 | 612.26 | 1.00 | +0 | ubuntu 18.04 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | |
| Same | 506.27 | 510.46 | 0.99 | +0 | macOS Monterey 12.2.1 | X64 | Intel Core i7-5557U CPU 3.10GHz (Broadwell) | |
System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound(Options: (en-US, IgnoreNonSpace, False))
| Result | Base | Diff | Ratio | Alloc Delta | Operating System | Bit | Processor Name | Modality |
|---|
| Slower | 575.01 | 4697.19 | 0.12 | +0 | Windows 10 | Arm64 | Microsoft SQ1 3.0 GHz | |
| Slower | 510.31 | 3140.84 | 0.16 | +0 | Windows 10 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | several? |
| Slower | 340.57 | 2604.90 | 0.13 | +0 | Windows 11 | X64 | AMD Ryzen Threadripper PRO 3945WX 12-Cores | |
| Same | 386.28 | 420.00 | 0.92 | +0 | ubuntu 18.04 | X64 | Intel Xeon CPU E5-1650 v4 3.60GHz | |
| Slower | 419.22 | 487.40 | 0.86 | +0 | macOS Monterey 12.2.1 | X64 | Intel Core i7-5557U CPU 3.10GHz (Broadwell) | |
Repro:
git clone https://github.com/dotnet/performance.git
cd performance
py .\scripts\benchmarks_ci.py -f net7.0 --filter System.Globalization.Tests.StringEquality.Compare_Same --bdn-arguments "--runtimes net7.0 nativeaot7.0"
BenchmarkDotNet=v0.13.1.1786-nightly, OS=Windows 10 (10.0.18363.2158/1909/November2019Update/19H2)
Intel Xeon CPU E5-1650 v4 3.60GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK=7.0.100-preview.5.22254.18
[Host] : .NET 7.0.0 (7.0.22.25401), X64 RyuJIT
Job-IDREEK : .NET 7.0.0 (7.0.22.25401), X64 RyuJIT
Job-JQUIIN : .NET 7.0.0-preview.5.22254.9, X64 NativeAOT
| Method | Runtime | Options | Mean | Ratio |
|---|
| Compare_Same | .NET 7.0 | (, IgnoreCase) | 580.84 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (, IgnoreCase) | 1,083.74 ns | 1.87 |
| | | | |
| Compare_Same | .NET 7.0 | (, None) | 568.35 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (, None) | 1,078.19 ns | 1.90 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, IgnoreCase) | 568.98 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, IgnoreCase) | 1,077.04 ns | 1.89 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, IgnoreNonSpace) | 575.34 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, IgnoreNonSpace) | 1,689.38 ns | 2.94 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, IgnoreSymbols) | 564.08 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, IgnoreSymbols) | 1,692.27 ns | 3.00 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, None) | 676.68 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, None) | 1,082.27 ns | 1.64 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, Ordinal) | 67.74 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, Ordinal) | 69.86 ns | 1.03 |
| | | | |
| Compare_Same | .NET 7.0 | (en-US, OrdinalIgnoreCase) | 829.30 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (en-US, OrdinalIgnoreCase) | 826.63 ns | 1.00 |
| | | | |
| Compare_Same | .NET 7.0 | (pl-PL, None) | 590.16 ns | 1.00 |
| Compare_Same | NativeAOT 7.0 | (pl-PL, None) | 21,787.90 ns | 36.71 |
It seems that for some reason, on Windows NativeAOT is not using ICU:

cc @jkotas@MichalStrehovsky@tarekgh
I've identified multiple globalization benchmarks that are few times slower compared to .NET, but only on Windows.
Examples:
Details
System.Globalization.Tests.StringSearch.IndexOf_Word_NotFound(Options: (en-US, IgnoreNonSpace, False))
System.Globalization.Tests.StringEquality.Compare_Same(Count: 1024, Options: (pl-PL, None))
System.Globalization.Tests.StringSearch.LastIndexOf_Word_NotFound(Options: (en-US, IgnoreNonSpace, False))
Repro:
It seems that for some reason, on Windows NativeAOT is not using ICU:
cc @jkotas@MichalStrehovsky@tarekgh