Skip to content

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 1x means 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.97M4.87M5.54x
Instance Field Set (boxed)17.97M5.68M3.17x
Static Field Get (boxed)9.15M2.73M3.36x
Static Field Set (boxed)3.31M964.1K3.44x
Instance Property Get (boxed)5.27M26.16M0.20x
Instance Property Set (boxed)10.02M1.89M5.31x
Static Property Get (boxed)19.60M12.95M1.51x
Static Property Set (boxed)19.59M1.61M12.14x
Instance Method Invoke (boxed)25.20M1.84M13.71x
Static Method Invoke (boxed)7.41M2.61M2.84x
Constructor Invoke (boxed)23.17M1.00M23.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.66M670.86M4.87M0.87x119.20x
Instance Field Set (typed)597.19M644.34M5.68M0.93x105.23x
Static Field Get (typed)618.28M709.36M2.73M0.87x226.87x
Static Field Set (typed)620.63M672.68M964.1K0.92x643.71x
Instance Property Get (typed)564.40M684.63M26.16M0.82x21.58x
Instance Property Set (typed)626.94M701.72M1.89M0.89x332.22x
Static Property Get (typed)618.67M683.45M12.95M0.91x47.76x
Static Property Set (typed)597.69M662.32M1.61M0.90x370.17x
Instance Method Invoke (typed)623.14M667.81M1.84M0.93x339.00x
Static Method Invoke (typed)577.86M657.41M2.61M0.88x221.54x

Strategy: Expressions

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)26.82M4.68M5.73x
Instance Field Set (boxed)17.02M5.42M3.14x
Static Field Get (boxed)10.74M7.70M1.39x
Static Field Set (boxed)23.06M3.14M7.35x
Instance Property Get (boxed)27.42M10.48M2.62x
Instance Property Set (boxed)23.17M1.09M21.26x
Static Property Get (boxed)27.50M8.67M3.17x
Static Property Set (boxed)25.82M1.18M21.93x
Instance Method Invoke (boxed)25.81M1.84M14.04x
Static Method Invoke (boxed)7.47M2.49M3.00x
Constructor Invoke (boxed)23.42M1.11M21.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.94M654.83M4.68M0.90x125.63x
Instance Field Set (typed)631.27M665.34M5.42M0.95x116.55x
Static Field Get (typed)598.87M697.71M7.70M0.86x77.75x
Static Field Set (typed)604.51M658.34M3.14M0.92x192.69x
Instance Property Get (typed)548.18M688.82M10.48M0.80x52.30x
Instance Property Set (typed)627.09M701.69M1.09M0.89x575.56x
Static Property Get (typed)608.80M683.92M8.67M0.89x70.19x
Static Property Set (typed)624.94M643.74M1.18M0.97x530.79x
Instance Method Invoke (typed)612.01M678.22M1.84M0.90x332.79x
Static Method Invoke (typed)586.74M652.85M2.49M0.90x235.86x

Strategy: Dynamic IL

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)26.53M4.88M5.44x
Instance Field Set (boxed)17.71M5.41M3.27x
Static Field Get (boxed)10.73M8.12M1.32x
Static Field Set (boxed)22.09M3.34M6.62x
Instance Property Get (boxed)26.94M10.61M2.54x
Instance Property Set (boxed)23.35M872.4K26.76x
Static Property Get (boxed)27.34M4.01M6.81x
Static Property Set (boxed)4.04M671.3K6.01x
Instance Method Invoke (boxed)1.66M1.15M1.44x
Static Method Invoke (boxed)26.87M2.62M10.27x
Constructor Invoke (boxed)9.88M2.50M3.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.30M702.60M4.88M0.85x122.21x
Instance Field Set (typed)602.42M653.76M5.41M0.92x111.31x
Static Field Get (typed)617.94M680.06M8.12M0.91x76.06x
Static Field Set (typed)621.50M646.50M3.34M0.96x186.31x
Instance Property Get (typed)558.13M676.35M10.61M0.83x52.58x
Instance Property Set (typed)610.32M699.18M872.4K0.87x699.61x
Static Property Get (typed)629.81M667.66M4.01M0.94x156.91x
Static Property Set (typed)596.33M633.30M671.3K0.94x888.31x
Instance Method Invoke (typed)601.44M678.52M1.15M0.89x523.14x
Static Method Invoke (typed)601.74M682.07M2.62M0.88x230.04x

Strategy: Reflection Fallback

Boxed Access (object)

Scenario Helper (ops/sec) System.Reflection (ops/sec) Speedup vs Reflection
Instance Field Get (boxed)6.99M6.94M1.01x
Instance Field Set (boxed)5.65M2.22M2.55x
Static Field Get (boxed)7.79M7.94M0.98x
Static Field Set (boxed)6.40M6.33M1.01x
Instance Property Get (boxed)9.76M24.66M0.40x
Instance Property Set (boxed)1.17M2.02M0.58x
Static Property Get (boxed)23.87M6.23M3.83x
Static Property Set (boxed)2.77M2.80M0.99x
Instance Method Invoke (boxed)1.86M1.83M1.02x
Static Method Invoke (boxed)2.57M2.52M1.02x
Constructor Invoke (boxed)2.42M2.35M1.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.19M687.76M6.94M0.00x0.32x
Instance Field Set (typed)5.56M663.47M2.22M0.01x2.51x
Static Field Get (typed)7.94M692.45M7.94M0.01x1.00x
Static Field Set (typed)6.14M658.82M6.33M0.01x0.97x
Instance Property Get (typed)552.52M696.34M24.66M0.79x22.40x
Instance Property Set (typed)603.84M690.68M2.02M0.87x299.17x
Static Property Get (typed)611.56M660.91M6.23M0.93x98.18x
Static Property Set (typed)603.81M643.88M2.80M0.94x215.53x
Instance Method Invoke (typed)598.18M684.02M1.83M0.87x326.27x
Static Method Invoke (typed)579.89M659.73M2.52M0.88x230.09x

macOS

No benchmark data generated yet.

Linux

No benchmark data generated yet.

Unknown / Other

No benchmark data generated yet.