Skip to content

Latest commit

 

History

History
257 lines (219 loc) · 18.5 KB

File metadata and controls

257 lines (219 loc) · 18.5 KB

Reflection Performance Benchmarks

Unity Helpers replaces ad-hoc reflection with cached delegates that favour expression lambdas on IL2CPP-safe platforms and fall back to dynamic IL emit or plain reflection where available. These benchmarks compare raw System.Reflection against the helpers for common access patterns.

Each run updates the table for the current operating system only. Sections that still show _No benchmark data generated yet._ simply have not been executed on that platform.

Windows

Generated on 2026-04-22 22:11:32 UTC

Strategy: Default (auto)

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)22.62M7.27M3.11x
Instance Field Set (boxed)21.97M5.47M4.02x
Static Field Get (boxed)21.09M8.59M2.45x
Static Field Set (boxed)22.83M6.14M3.72x
Instance Property Get (boxed)23.39M21.74M1.08x
Instance Property Set (boxed)21.72M2.06M10.54x
Static Property Get (boxed)20.11M21.72M0.93x
Static Property Set (boxed)23.22M2.89M8.03x
Instance Method Invoke (boxed)15.03M1.98M7.58x
Static Method Invoke (boxed)22.70M2.66M8.55x
Constructor Invoke (boxed)22.47M2.58M8.70x

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)606.46M658.01M7.27M0.92x83.42x
Instance Field Set (typed)637.35M656.91M5.47M0.97x116.55x
Static Field Get (typed)621.85M692.09M8.59M0.90x72.35x
Static Field Set (typed)625.47M671.36M6.14M0.93x101.80x
Instance Property Get (typed)600.74M688.18M21.74M0.87x27.63x
Instance Property Set (typed)624.84M691.35M2.06M0.90x303.38x
Static Property Get (typed)612.86M683.35M21.72M0.90x28.22x
Static Property Set (typed)611.11M654.86M2.89M0.93x211.28x
Instance Method Invoke (typed)590.08M678.28M1.98M0.87x297.48x
Static Method Invoke (typed)625.72M676.09M2.66M0.93x235.57x

Strategy: Expressions

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)23.47M7.32M3.21x
Instance Field Set (boxed)23.17M5.44M4.26x
Static Field Get (boxed)22.07M8.60M2.57x
Static Field Set (boxed)10.70M2.36M4.54x
Instance Property Get (boxed)9.42M20.66M0.46x
Instance Property Set (boxed)21.57M2.05M10.50x
Static Property Get (boxed)20.44M23.00M0.89x
Static Property Set (boxed)23.55M2.87M8.19x
Instance Method Invoke (boxed)17.58M1.95M9.03x
Static Method Invoke (boxed)22.43M2.66M8.42x
Constructor Invoke (boxed)23.28M2.55M9.12x

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)586.62M653.32M7.32M0.90x80.18x
Instance Field Set (typed)637.71M664.97M5.44M0.96x117.24x
Static Field Get (typed)621.80M692.98M8.60M0.90x72.28x
Static Field Set (typed)611.56M652.12M2.36M0.94x259.56x
Instance Property Get (typed)594.57M696.32M20.66M0.85x28.77x
Instance Property Set (typed)628.75M694.19M2.05M0.91x306.18x
Static Property Get (typed)613.37M681.83M23.00M0.90x26.67x
Static Property Set (typed)612.51M654.56M2.87M0.94x213.09x
Instance Method Invoke (typed)583.62M677.29M1.95M0.86x299.64x
Static Method Invoke (typed)628.39M683.12M2.66M0.92x235.84x

Strategy: Dynamic IL

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)23.05M7.29M3.16x
Instance Field Set (boxed)23.24M5.43M4.28x
Static Field Get (boxed)21.82M8.59M2.54x
Static Field Set (boxed)23.74M6.16M3.86x
Instance Property Get (boxed)23.17M22.17M1.05x
Instance Property Set (boxed)21.90M2.05M10.67x
Static Property Get (boxed)19.71M21.61M0.91x
Static Property Set (boxed)23.43M2.93M7.99x
Instance Method Invoke (boxed)15.77M1.99M7.92x
Static Method Invoke (boxed)21.32M1.75M12.19x
Constructor Invoke (boxed)3.11M1.30M2.39x

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)611.96M651.59M7.29M0.94x83.98x
Instance Field Set (typed)626.22M656.37M5.43M0.95x115.34x
Static Field Get (typed)608.85M680.73M8.59M0.89x70.89x
Static Field Set (typed)624.15M652.36M6.16M0.96x101.37x
Instance Property Get (typed)588.35M682.49M22.17M0.86x26.54x
Instance Property Set (typed)624.70M694.66M2.05M0.90x304.30x
Static Property Get (typed)613.69M681.86M21.61M0.90x28.40x
Static Property Set (typed)613.09M655.63M2.93M0.94x209.14x
Instance Method Invoke (typed)584.07M677.66M1.99M0.86x293.52x
Static Method Invoke (typed)628.55M676.39M1.75M0.93x359.42x

Strategy: Reflection Fallback

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)7.10M7.28M0.97x
Instance Field Set (boxed)5.42M4.59M1.18x
Static Field Get (boxed)6.58M8.60M0.76x
Static Field Set (boxed)6.12M4.11M1.49x
Instance Property Get (boxed)23.01M22.00M1.05x
Instance Property Set (boxed)2.04M2.07M0.98x
Static Property Get (boxed)17.69M22.30M0.79x
Static Property Set (boxed)2.87M2.91M0.98x
Instance Method Invoke (boxed)1.97M1.95M1.01x
Static Method Invoke (boxed)2.63M2.66M0.99x
Constructor Invoke (boxed)2.33M1.32M1.77x

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)7.18M659.87M7.28M0.01x0.99x
Instance Field Set (typed)5.46M656.66M4.59M0.01x1.19x
Static Field Get (typed)8.23M681.48M8.60M0.01x0.96x
Static Field Set (typed)4.17M652.72M4.11M0.01x1.01x
Instance Property Get (typed)588.37M685.00M22.00M0.86x26.74x
Instance Property Set (typed)624.63M690.38M2.07M0.90x301.69x
Static Property Get (typed)610.71M682.48M22.30M0.89x27.38x
Static Property Set (typed)614.38M655.45M2.91M0.94x210.91x
Instance Method Invoke (typed)573.44M678.96M1.95M0.84x294.38x
Static Method Invoke (typed)628.94M675.41M2.66M0.93x236.59x

macOS

No benchmark data generated yet.

Linux

No benchmark data generated yet.

Unknown / Other

No benchmark data generated yet.