Reflection Performance Benchmarks¶
Use this page to compare repeated member access after setup. For choosing an overload and handling stripped players, start with the Reflection Helpers guide.
Read the results¶
- Boxed access accepts or returns
object. Value types may box; method calls may need argument arrays. - Typed access uses known receiver, parameter and return types. Direct delegates can avoid those costs, but reflection fallback paths can still box or allocate.
- Speedup vs Reflection compares the helper with the reflection operation in that row. A ratio below
1xmeans the helper was slower. - Speedup vs Delegate compares typed helpers with an ordinary delegate. It does not compare with direct field access or prove a benefit for a complete game system.
The historical Windows report below was generated on the displayed date. It does not record a Unity version, scripting backend, CPU identity, uncertainty interval or allocation result here. Treat its values as examples of how costs vary, not as current cross-platform guarantees. For example, the default boxed instance property getter reports 0.20x reflection throughput; the default typed instance field getter reports 0.87x ordinary delegate throughput.
Choose for your target¶
Editor and Mono builds can use dynamic IL or compiled expressions. Member-specific strategy order varies, and unsupported paths fall back. IL2CPP and player WebGL disable runtime IL emission and expression compilation; compatible methods can still bind directly to delegates, while other operations use reflection wrappers. A heading such as “Reflection Fallback” does not imply that every typed method in that section uses MethodInfo.Invoke.
Measure member discovery, delegate setup and warmed invocation separately. Then measure the whole consumer operation on your actual backend with your shipping stripping level. Preserve reflected members and verify lookup before interpreting timings. See Reading Performance Measurements for comparison limits.
Sections with _No benchmark data generated yet._ provide no measurements for that operating system. An operating-system heading alone does not establish Mono or IL2CPP coverage.
Windows¶
Generated on 2026-09-14 05:37:47 UTC
Strategy: Default (auto)¶
Boxed Access (object)¶
| Scenario | Helper (ops/sec) | System.Reflection (ops/sec) | Speedup vs Reflection |
|---|---|---|---|
| Instance Field Get (boxed) | 26.97M | 4.87M | 5.54x |
| Instance Field Set (boxed) | 17.97M | 5.68M | 3.17x |
| Static Field Get (boxed) | 9.15M | 2.73M | 3.36x |
| Static Field Set (boxed) | 3.31M | 964.1K | 3.44x |
| Instance Property Get (boxed) | 5.27M | 26.16M | 0.20x |
| Instance Property Set (boxed) | 10.02M | 1.89M | 5.31x |
| Static Property Get (boxed) | 19.60M | 12.95M | 1.51x |
| Static Property Set (boxed) | 19.59M | 1.61M | 12.14x |
| Instance Method Invoke (boxed) | 25.20M | 1.84M | 13.71x |
| Static Method Invoke (boxed) | 7.41M | 2.61M | 2.84x |
| Constructor Invoke (boxed) | 23.17M | 1.00M | 23.09x |
Typed Access (no boxing)¶
| Scenario | Helper (ops/sec) | Baseline Delegate (ops/sec) | System.Reflection (ops/sec) | Speedup vs Delegate | Speedup vs Reflection |
|---|---|---|---|---|---|
| Instance Field Get (typed) | 580.66M | 670.86M | 4.87M | 0.87x | 119.20x |
| Instance Field Set (typed) | 597.19M | 644.34M | 5.68M | 0.93x | 105.23x |
| Static Field Get (typed) | 618.28M | 709.36M | 2.73M | 0.87x | 226.87x |
| Static Field Set (typed) | 620.63M | 672.68M | 964.1K | 0.92x | 643.71x |
| Instance Property Get (typed) | 564.40M | 684.63M | 26.16M | 0.82x | 21.58x |
| Instance Property Set (typed) | 626.94M | 701.72M | 1.89M | 0.89x | 332.22x |
| Static Property Get (typed) | 618.67M | 683.45M | 12.95M | 0.91x | 47.76x |
| Static Property Set (typed) | 597.69M | 662.32M | 1.61M | 0.90x | 370.17x |
| Instance Method Invoke (typed) | 623.14M | 667.81M | 1.84M | 0.93x | 339.00x |
| Static Method Invoke (typed) | 577.86M | 657.41M | 2.61M | 0.88x | 221.54x |
Strategy: Expressions¶
Boxed Access (object)¶
| Scenario | Helper (ops/sec) | System.Reflection (ops/sec) | Speedup vs Reflection |
|---|---|---|---|
| Instance Field Get (boxed) | 26.82M | 4.68M | 5.73x |
| Instance Field Set (boxed) | 17.02M | 5.42M | 3.14x |
| Static Field Get (boxed) | 10.74M | 7.70M | 1.39x |
| Static Field Set (boxed) | 23.06M | 3.14M | 7.35x |
| Instance Property Get (boxed) | 27.42M | 10.48M | 2.62x |
| Instance Property Set (boxed) | 23.17M | 1.09M | 21.26x |
| Static Property Get (boxed) | 27.50M | 8.67M | 3.17x |
| Static Property Set (boxed) | 25.82M | 1.18M | 21.93x |
| Instance Method Invoke (boxed) | 25.81M | 1.84M | 14.04x |
| Static Method Invoke (boxed) | 7.47M | 2.49M | 3.00x |
| Constructor Invoke (boxed) | 23.42M | 1.11M | 21.01x |
Typed Access (no boxing)¶
| Scenario | Helper (ops/sec) | Baseline Delegate (ops/sec) | System.Reflection (ops/sec) | Speedup vs Delegate | Speedup vs Reflection |
|---|---|---|---|---|---|
| Instance Field Get (typed) | 587.94M | 654.83M | 4.68M | 0.90x | 125.63x |
| Instance Field Set (typed) | 631.27M | 665.34M | 5.42M | 0.95x | 116.55x |
| Static Field Get (typed) | 598.87M | 697.71M | 7.70M | 0.86x | 77.75x |
| Static Field Set (typed) | 604.51M | 658.34M | 3.14M | 0.92x | 192.69x |
| Instance Property Get (typed) | 548.18M | 688.82M | 10.48M | 0.80x | 52.30x |
| Instance Property Set (typed) | 627.09M | 701.69M | 1.09M | 0.89x | 575.56x |
| Static Property Get (typed) | 608.80M | 683.92M | 8.67M | 0.89x | 70.19x |
| Static Property Set (typed) | 624.94M | 643.74M | 1.18M | 0.97x | 530.79x |
| Instance Method Invoke (typed) | 612.01M | 678.22M | 1.84M | 0.90x | 332.79x |
| Static Method Invoke (typed) | 586.74M | 652.85M | 2.49M | 0.90x | 235.86x |
Strategy: Dynamic IL¶
Boxed Access (object)¶
| Scenario | Helper (ops/sec) | System.Reflection (ops/sec) | Speedup vs Reflection |
|---|---|---|---|
| Instance Field Get (boxed) | 26.53M | 4.88M | 5.44x |
| Instance Field Set (boxed) | 17.71M | 5.41M | 3.27x |
| Static Field Get (boxed) | 10.73M | 8.12M | 1.32x |
| Static Field Set (boxed) | 22.09M | 3.34M | 6.62x |
| Instance Property Get (boxed) | 26.94M | 10.61M | 2.54x |
| Instance Property Set (boxed) | 23.35M | 872.4K | 26.76x |
| Static Property Get (boxed) | 27.34M | 4.01M | 6.81x |
| Static Property Set (boxed) | 4.04M | 671.3K | 6.01x |
| Instance Method Invoke (boxed) | 1.66M | 1.15M | 1.44x |
| Static Method Invoke (boxed) | 26.87M | 2.62M | 10.27x |
| Constructor Invoke (boxed) | 9.88M | 2.50M | 3.96x |
Typed Access (no boxing)¶
| Scenario | Helper (ops/sec) | Baseline Delegate (ops/sec) | System.Reflection (ops/sec) | Speedup vs Delegate | Speedup vs Reflection |
|---|---|---|---|---|---|
| Instance Field Get (typed) | 596.30M | 702.60M | 4.88M | 0.85x | 122.21x |
| Instance Field Set (typed) | 602.42M | 653.76M | 5.41M | 0.92x | 111.31x |
| Static Field Get (typed) | 617.94M | 680.06M | 8.12M | 0.91x | 76.06x |
| Static Field Set (typed) | 621.50M | 646.50M | 3.34M | 0.96x | 186.31x |
| Instance Property Get (typed) | 558.13M | 676.35M | 10.61M | 0.83x | 52.58x |
| Instance Property Set (typed) | 610.32M | 699.18M | 872.4K | 0.87x | 699.61x |
| Static Property Get (typed) | 629.81M | 667.66M | 4.01M | 0.94x | 156.91x |
| Static Property Set (typed) | 596.33M | 633.30M | 671.3K | 0.94x | 888.31x |
| Instance Method Invoke (typed) | 601.44M | 678.52M | 1.15M | 0.89x | 523.14x |
| Static Method Invoke (typed) | 601.74M | 682.07M | 2.62M | 0.88x | 230.04x |
Strategy: Reflection Fallback¶
Boxed Access (object)¶
| Scenario | Helper (ops/sec) | System.Reflection (ops/sec) | Speedup vs Reflection |
|---|---|---|---|
| Instance Field Get (boxed) | 6.99M | 6.94M | 1.01x |
| Instance Field Set (boxed) | 5.65M | 2.22M | 2.55x |
| Static Field Get (boxed) | 7.79M | 7.94M | 0.98x |
| Static Field Set (boxed) | 6.40M | 6.33M | 1.01x |
| Instance Property Get (boxed) | 9.76M | 24.66M | 0.40x |
| Instance Property Set (boxed) | 1.17M | 2.02M | 0.58x |
| Static Property Get (boxed) | 23.87M | 6.23M | 3.83x |
| Static Property Set (boxed) | 2.77M | 2.80M | 0.99x |
| Instance Method Invoke (boxed) | 1.86M | 1.83M | 1.02x |
| Static Method Invoke (boxed) | 2.57M | 2.52M | 1.02x |
| Constructor Invoke (boxed) | 2.42M | 2.35M | 1.03x |
Typed Access (no boxing)¶
| Scenario | Helper (ops/sec) | Baseline Delegate (ops/sec) | System.Reflection (ops/sec) | Speedup vs Delegate | Speedup vs Reflection |
|---|---|---|---|---|---|
| Instance Field Get (typed) | 2.19M | 687.76M | 6.94M | 0.00x | 0.32x |
| Instance Field Set (typed) | 5.56M | 663.47M | 2.22M | 0.01x | 2.51x |
| Static Field Get (typed) | 7.94M | 692.45M | 7.94M | 0.01x | 1.00x |
| Static Field Set (typed) | 6.14M | 658.82M | 6.33M | 0.01x | 0.97x |
| Instance Property Get (typed) | 552.52M | 696.34M | 24.66M | 0.79x | 22.40x |
| Instance Property Set (typed) | 603.84M | 690.68M | 2.02M | 0.87x | 299.17x |
| Static Property Get (typed) | 611.56M | 660.91M | 6.23M | 0.93x | 98.18x |
| Static Property Set (typed) | 603.81M | 643.88M | 2.80M | 0.94x | 215.53x |
| Instance Method Invoke (typed) | 598.18M | 684.02M | 1.83M | 0.87x | 326.27x |
| Static Method Invoke (typed) | 579.89M | 659.73M | 2.52M | 0.88x | 230.09x |
macOS¶
No benchmark data generated yet.
Linux¶
No benchmark data generated yet.
Unknown / Other¶
No benchmark data generated yet.