Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Improved performance of System.Reflection.Emit API#23833

Merged
jkotas merged 15 commits intodotnet:masterfrom
bbartels:master
Apr 15, 2019
Merged

Improved performance of System.Reflection.Emit API#23833
jkotas merged 15 commits intodotnet:masterfrom
bbartels:master

Conversation

@bbartels
Copy link
Copy Markdown

@bbartels bbartels commented Apr 9, 2019

Performance Improvements to System.Reflection.Emit.ILGenerator

When researching how dynamically emitting IL works in the CoreClr I stumbled upon a couple blocks of code that looked like they could be changed to improve performance.

This investigation led me to make significant performance improvements to the ILGenerator class.

Below is an image of the benchmarks i ran on a couple of publicly facing routines of the ILGenerator.

Method Cycles Old New Change
ILGenerator.Emit(OpCode, long) 128 2.031 us 961.8 ns +111%
ILGenerator.Emit(OpCode) 128 1.259 us 642.2 ns +96%
ILGenerator.Emit(OpCode, double) 128 1.995 us 953.2 ns +109%
ILGenerator.Emit(OpCode, int) 128 1.625 us 901.0 ns +80%
ILGenerator.Emit(OpCode, byte) 128 1.383 us 769.6 ns +79%
ILGenerator.Emit(OpCode, float) 128 1.482 us 907.9 ns +63%

Above table as Image of BenchmarkDotNet output (Outdated)

As you can see, a nearly 2x improvement across the board!
These improvements are not just limited to the routines in the benchmarks. Most, if not all ILGenerator.Emit routines should see some sort of improvement in performance.

@dnfclas
Copy link
Copy Markdown

dnfclas commented Apr 9, 2019

CLA assistant check
All CLA requirements met.

Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Checked again, UpdateStackSize(OpCode, int) seems to inline afterall, removed manual inline
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
@bbartels bbartels changed the title Significantly improved performance of System.Reflection.Emit API WIP: Significantly improved performance of System.Reflection.Emit API Apr 10, 2019
@bbartels bbartels changed the title WIP: Significantly improved performance of System.Reflection.Emit API Improved performance of System.Reflection.Emit API Apr 11, 2019
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Co-Authored-By: bbartels <bartels.benjamin@tutanota.de>
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
@bbartels bbartels changed the title Improved performance of System.Reflection.Emit API WIP Improved performance of System.Reflection.Emit API Apr 11, 2019
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
Comment thread src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs Outdated
@bbartels bbartels changed the title WIP Improved performance of System.Reflection.Emit API Improved performance of System.Reflection.Emit API Apr 15, 2019
Copy link
Copy Markdown
Member

@jkotas jkotas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great. Thank you!

@jkotas jkotas merged commit 77a5f9c into dotnet:master Apr 15, 2019
picenka21 pushed a commit to picenka21/runtime that referenced this pull request Feb 18, 2022
)

* Improved performance of System.Reflection.Emit API

* Moved heap allocation to stack

* Eliminating conditional branch by casting sbyte to byte

* Reduced heap allocation of ScopeTree

* Removed redundant `unsafe` from function signature


Commit migrated from dotnet/coreclr@77a5f9c
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants