Skip to content
This repository has been archived by the owner on May 16, 2022. It is now read-only.

More aggressive ahead of time optimization for string-key type formatter. #200

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

pCYSl5EDgo
Copy link

Summary

Current UniversalCodeGenerator generated formatter code unnecessarily allocates byte[] array and others.
This pull request reduces memory allocation, improves runtime initialization performance and embeds specialized automaton code for deserialization.

Benchmark

BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18363
Intel Core i7-8750H CPU 2.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.200
  [Host]     : .NET Core 3.1.2 (CoreCLR 4.700.20.6602, CoreFX 4.700.20.6702), X64 RyuJIT
  Job-RCOQVZ : .NET Core 3.1.2 (CoreCLR 4.700.20.6602, CoreFX 4.700.20.6702), X64 RyuJIT

Runtime=.NET Core 3.1  
Method ConstantString Mean Error StdDev Median
DeserializeTest_NewEmbeddedFormatter 669.1 ns 13.12 ns 13.48 ns 667.4 ns
DeserializeTest2_OriginalGeneratedFormatter 924.4 ns 18.56 ns 42.64 ns 914.6 ns
DeserializeTest3_DynamicILGenerator_Formatter 675.5 ns 13.49 ns 24.66 ns 672.1 ns
DeserializeTest_NewEmbeddedFormatter a 751.3 ns 21.10 ns 60.21 ns 731.5 ns
DeserializeTest2_OriginalGeneratedFormatter a 930.9 ns 15.06 ns 14.09 ns 929.3 ns
DeserializeTest3_DynamicILGenerator_Formatter a 672.3 ns 13.36 ns 13.72 ns 666.1 ns
DeserializeTest_NewEmbeddedFormatter shorter 736.6 ns 16.93 ns 15.83 ns 731.6 ns
DeserializeTest2_OriginalGeneratedFormatter shorter 1,005.6 ns 19.96 ns 48.20 ns 995.6 ns
DeserializeTest3_DynamicILGenerator_Formatter shorter 694.8 ns 12.88 ns 12.65 ns 692.0 ns
DeserializeTest_NewEmbeddedFormatter このベンチ(...) [62] 1,208.8 ns 22.94 ns 24.54 ns 1,206.4 ns
DeserializeTest2_OriginalGeneratedFormatter このベンチ(...) [62] 1,550.3 ns 45.38 ns 128.74 ns 1,510.0 ns
DeserializeTest3_DynamicILGenerator_Formatter このベンチ(...) [62] 1,169.7 ns 16.99 ns 14.19 ns 1,165.6 ns

Benchmark Project Gist.

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.

None yet

1 participant