There is an old saying that knowing what things cost is half the battle, and in this case that is certainly true. Understanding the relative cost for various approaches can be important when you’re looking to get as many nanoseconds out of your process as possible. Here is a summary captured on relatively old equipment, but keep in mind we are looking to understand the relative costs for various choices. If you do a little profiling of your own you may find even more surpises.
Constructing Objects
| new value type L1 |
2.6 ns |
| new value type L2 |
4.6 ns |
| new value type L3 |
6.4 ns |
| new value type L4 |
8.0 ns |
| new value type L5 |
22.9 ns |
| new ref type L1 |
20.3 ns |
| new ref type L2 |
23.9 ns |
| new ref type L3 |
27.5 ns |
| new ref type L4 |
30.8 ns |
| new ref type L5 |
34.4 ns |
Note: times will go higher for ref types depending on ctor param arrangement
Arithmetic Operations
| Addition |
1.0 ns |
| Subtract |
1.0 ns |
| Multiply |
2.7 ns |
| Divide |
35.7 ns |
| Shift |
2.1 ns |
Method Calls
| static call |
6.1 ns |
| instance call |
6.8 ns |
| instance this call |
6.2 ns |
| Inlined static call |
0.2 ns |
| Inlined instance call |
1.0 ns |
| Inlined instance this call |
0.2 ns |
| virtual call |
5.4 ns |
| this virtual call |
5.4 ns |
| interface call |
6.5 ns |
Casting
| cast up 1 |
0.4 ns |
| cast down 1 |
8.8 ns |
Field and Property Access
| get field |
1.0 ns |
| get property |
1.2 ns |
| set field |
1.2 ns |
| set property |
1.2 ns |
| get virtual property |
6.3 ns |
| set virtual property |
6.3 ns |
Boxing
| Box int |
21.6 ns |
| Unbox int |
3.0 ns |
Delegates
| delegate invocation |
40.9 ns |
Tags: performance