Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Есть еще такой проект интересный: FastExpressionCompiler, призванный как раз сократить разницу между Expression.Compile и Reflection.Emit.
Цитата оттуда:
The question is, why is the compiled delegate way slower than a manually-written delegate? Expression.Compile creates a DynamicMethod and associates it with an anonymous assembly to run it in a sandboxed environment. This makes it safe for a dynamic method to be emitted and executed by partially trusted code but adds some run-time overhead.
BenchmarkDotNet=v0.10.14, OS=Windows 7 SP1 (6.1.7601.0)
Intel Core i5-2500 CPU 3.30GHz (Sandy Bridge), 1 CPU, 4 logical and 4 physical cores, Frequency=3232187 Hz, Resolution=309.3880 ns, Timer=TSC
Clr: .NET Framework 4.6.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.6.1590.0
Method Mean Error StdDev
Native 307.6 us 1.688 us 1.579 us
NativeUnsafe 292.5 us 2.178 us 2.037 us
NativeDelegate 307.8 us 1.743 us 1.631 us
LinqExpressions 308.0 us 2.393 us 2.239 us
ReflectionEmitExpressionRunAndSave 307.4 us 1.437 us 1.344 us
ReflectionEmitExpressionRunAndCollect 307.5 us 1.776 us 1.575 us
ReflectionEmitExpressionRun 306.9 us 1.628 us 1.522 us
ReflectionEmitNativeRunAndSave 307.2 us 1.185 us 1.108 us
ReflectionEmitNativeRunAndCollect 308.8 us 2.162 us 2.022 us
ReflectionEmitNativeRun 307.0 us 1.474 us 1.378 us
Скорость работы скомпилированного Linq Expression Tree