Skip to content
This repository was 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
pCYSl5EDgo wants to merge 1 commit into
neuecc:masterfrom
pCYSl5EDgo:string-key-aot
Open

More aggressive ahead of time optimization for string-key type formatter.#200
pCYSl5EDgo wants to merge 1 commit into
neuecc:masterfrom
pCYSl5EDgo:string-key-aot

Conversation

@pCYSl5EDgo

Copy link
Copy Markdown

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.

1 participant