ΠΡΠ°ΠΊ, Ρ Β Π²Π°Ρ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ‑ΡΠΎ Π·Π°Π΄Π°ΡΠΈ. Π Β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ c Β ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π‘Π°ΠΌΡΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½ΡΒ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ StopWatch Π²ΠΎΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Β
Β
ΠΠΎΒ Ρ Β ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π΅ΡΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
- ΠΠ½Β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ Β ΡΠΎΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΈ Β Π½Π° Β Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²Π»ΠΈΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ΄-ΡΡΡΠ΅ΠΊΡΡ (ΠΆΡΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ, Π½Π΅ Β ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΉ ΠΊΡΡ ΠΈ Β ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Β Ρ.Π΄.).
- ΠΠ½ Π½Π΅ Β Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Β Production-ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠΎ Β Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π±Π΅Π· Π½Π°ΡΠ΅Π³ΠΎ ΡΡΠ°ΡΡΠΈΡ, ΠΈ Β ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° Β ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
- ΠΠ°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ΅Π±Ρ Π½Π° Β ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Β Π²ΡΠ΄Π°ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° Β Π±ΠΎΠ»ΡΡΠΎΠΌ (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ). ΠΠΎΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² Β ΡΠ°Π·Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Ρ Β ΡΠ°Π·Π½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Β Π½ΠΈΡ .
ΠΒ ΠΊΠ°ΠΊΠΈΠ΅Β ΠΆΠ΅ Ρ Β Π½Π°Ρ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ? ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°? ΠΠ° Β ΠΏΠΎΠΌΠΎΡΡ Π² Β ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅Ρ BenchmarkDotNet.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°
BenchmarkDotNetΒ β ΡΡΠΎ NuGet-ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π° Β Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Β Π·Π°ΡΠ΅ΠΌ Ρ Β Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π΄Π²Π΅ Π²Π΅ΡΠΈΒ β ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³ ΠΊΠΎΠ΄Π°, ΠΈ Β ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΡΡΡΠΈΡΡ runner Π΄Π»Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Β
ΠΠΎΡ ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π° Π² Β ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅:
Β
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎ Ρ Β Π½Π°Ρ Π² Β ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ. ΠΠ°ΡΠ½Π΅ΠΌ Ρ Β Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°.
MemoryDiagnoser ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Β ΡΠ°Π±ΠΎΡΠ΅ Garbage Collector-Π° ΠΈ Β Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎ Β Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
Orderer ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² Β ΡΠ°Π±Π»ΠΈΡΠ΅. Π Β Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΠΈΡ FastestToSlowest. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ Π² Β ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ , Π° Β ΡΠ°ΠΌΡΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉΒ β ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ.
RankColumn Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡ Π² Β ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΡΡΡΡ ΠΈ Β Π½ΡΠΌΠ΅ΡΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΡ Β 1Β Π΄ΠΎ Β Π₯.
ΠΠ°Β ΡΠ°ΠΌΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Ρ Β Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π°ΡΡΠΈΠ±ΡΡ Benchmark. ΠΠ½ Β ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Β ΡΠ΅ΡΡΠΎΠ²ΡΡ ΠΊΠ΅ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ. Π Β ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Baseline=true Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΡ Β Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ Π·Π° Β 100%. Π Β Π·Π°ΡΠ΅ΠΌ ΡΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ².
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π²ΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΠ°Π·Π»Π°Β β Runner. Π‘ Β Π½ΠΈΠΌ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ: ΠΈΠ΄ΡΠΌ Π² Β Π½Π°Ρ Program.cs (ΠΌΡ Β Π²ΡΡ Π΅ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Β ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) ΠΈ Β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΡΠΊΡ Ρ Β BenchmarkRunner:
Β
Β
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ Β ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Β Production-ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈ Β Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Β Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΠ½Π°Π»ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
ΠΡΠ»ΠΈ Π²ΡΡΠ΅ ΠΌΡ Β Π²ΡΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ Β ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΡ Β ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ BenchmarkRunner Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π°Ρ ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π· ΠΈ Β Π² Β ΠΊΠΎΠ½ΡΠ΅ Π²ΡΠ΄Π°Π΅Ρ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΡΠ΅Ρ:
ΠΒ ΠΎΡΡΡΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΡΡ ΠΎ Β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°, Π²Π΅ΡΡΠΈΠΈΒ ΠΠ‘, Π½Π° Β ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ ΡΠ΅ΡΡ, ΠΎΠ± Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅ ΠΈ Β Π²Π΅ΡΡΠΈΠΈ .Net. ΠΠΎ Β ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°,Β β ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΠΊΠ°. Π Β Π½Π΅ΠΉ ΠΌΡ Β Π²ΠΈΠ΄ΠΈΠΌ:
- MeanΒ β ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ, Π·Π° Β ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°Ρ ΠΊΠΎΠ΄;
- ErrorΒ β ΠΎΡΠΈΠ±ΠΊΡ ΠΎΡΠ΅Π½ΠΊΠΈ (ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΎΡ Β 99.9Β ΠΏΠ΅ΡΡΠ΅Π½ΡΠΈΠ»Ρ);
- StdDevΒ β ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½ΠΊΠΈ;
- RatioΒ β ΠΎΡΠ΅Π½ΠΊΠ° Π² Β ΠΏΡΠΎΡΠ΅Π½ΡΠ°Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡ ΡΠ΄ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ BaselineΒ β Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Β ΡΡΠΈΡΠ°Π΅ΠΌ Π·Π° Β ΡΠΎΡΠΊΡ ΠΎΡΡΡΡΡΠ° (ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Baseline=true Π²ΡΡΠ΅?);
- RankΒ β ΡΠ°Π½ΠΊΠΈΠ½Π³;
- AllocatedΒ β Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ Π²ΠΎ Β Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π Π΅Π°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΡ
Π§ΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅, Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π½Π°ΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈ Β ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ»Π°ΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Β
Β
ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ΠΉΡΠ°ΡΒ β ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ Β Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³ΠΎΠΌ. Π‘Π°ΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Β ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΠΌ, ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠΊΠ° Π² Β ΡΡΠΎΡΠΎΠ½Π΅Β β ΡΡΠΎ ΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ.
ΠΒ Π²ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈΠ½Π³Π°:
Β
Β
Π’ΡΡ ΠΌΡ Β Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎ GetYearFromDateTime, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Β Π²Π·ΡΠ»ΠΈ Π·Π° Β ΡΠΎΡΠΊΡ ΠΎΡΡΡΡΡΠ°,Β β ΡΠ°ΠΌΡΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΠΈ Β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° 218Β Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄, Π² Β ΡΠΎ Β Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ Π²Π°ΡΠΈΠ°Π½ΡΒ GetYearFromSpanWithManualConversion ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ 6.2 Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄ΡΒ β Π² Β 35Β ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
Π’Π°ΠΊΠΆΠ΅ ΠΌΡ Β ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ»ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π΄Π»Ρ Π΄Π²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² GetYearFromSplit ΠΈ Β GetYearFromSubstring, ΠΈ Β ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Garbage Collector-Ρ Π½Π° Β ΠΎΡΠΈΡΡΠΊΡ ΡΡΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΎΠ±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ).
Π Π°Π±ΠΎΡΠ° Ρ Β ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ Ρ Β Π±Ρ Ρ ΠΎΡΠ΅Π» ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Β ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° Β Π±ΠΎΠ»ΡΡΠΈΡ ΠΈ Β ΠΌΠ°Π»ΡΡ Π½Π°Π±ΠΎΡΠ°Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ BenchmarkDotNet ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π°ΠΌ Π΄Π²Π° Π°ΡΡΠΈΠ±ΡΡΠ°Β β Params ΠΈ Β GlobalSetup.
ΠΠΎΡ ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ»Π°ΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ° Ρ Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ Π΄Π²ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²:
Β
Β
ΠΒ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»Π΅ Size ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈ Β Π²Π»ΠΈΡΠ΅Ρ Π½Π° Β ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Β GlobalSetup.
ΠΒ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ GlobalSetup Ρ Β Π½Π°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Β 10, 1000 ΠΈ Β 10000 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². ΠΠ°ΠΊ Ρ Β ΠΈ Β Π³ΠΎΠ²ΠΎΡΠΈΠ» Π² Β Π½Π°ΡΠ°Π»Π΅ ΡΡΠ°ΡΡΠΈ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΌΠΎΠ³ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎΠΌ ΠΊΠΎΠ»‑Π²Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ ΠΈ Β ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Β ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
Β
Β
Π’ΡΡ ΠΌΡ Β ΡΠΆΠ΅ ΡΡΡΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Ρ Β 10, 1000 ΠΈ Β 10000Β ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ: ΠΌΠ΅ΡΠΎΠ΄ Span Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Β ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π° Β ΠΌΠ΅ΡΠΎΠ΄ NewArray ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²ΡΠ΅ Ρ ΡΠΆΠ΅ ΠΈ Β Ρ ΡΠΆΠ΅ Ρ Β ΡΠΎΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π°Π½Π½ΡΡ .
ΠΡΠ°ΡΠΈΠΊΠΈ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° BenchmarkDotNet ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΈ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π½ΠΎ ΠΈ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ - Π² Π²ΠΈΠ΄Π΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ².Β
ΠΠ»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π΅Π½ΡΠΌΠ°ΡΠΊ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π·Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ .NET8 ΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ Π΅Π³ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ 3 ΡΠ°Π·Π° Π΄Π»Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²: 1000, 5000, 10000. Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
- DefaultSort - Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² .NET8
- InsertionSort - ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ
- MergeSort - ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ
- QuickSort - Π±ΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
- SelectSort - ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠ±ΠΎΡΠΎΠΌ
Β

Β
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈΒ ΡΠ²ΠΎΠ΄Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π³ΡΠ°ΡΠΈΠΊΠ°:
Β

Β
Π’Π°ΠΊΠΆΠ΅ BenchmarkDotNet ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ - ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ) Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:

Β
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ°ΠΊ, ΠΌΡ Β ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ Β ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Β BenchmarkDotNet ΠΈ Β ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Β ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΈ Β ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΒ β ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΎΡΡΠ°Π²ΠΈΡΡ, Π° Β ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΈ Β Π²ΠΎΠ²ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΡΡΠΎΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, Π° Β Π·Π½Π°ΡΠΈΡΒ β ΡΠ»ΡΡΡΠ°ΡΡ ΠΆΠΈΠ·Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Β
ΠΠ²ΡΠΎΡ: ΠΠ½ΡΠΎΠ½ ΠΠΎΡΠΎΡΡΠ½ΡΠ΅Π²
Π Π΅Π΄Π°ΠΊΡΡΡΠ°: ΠΠ°ΡΠΈΠ½Π° ΠΠ΅Π΄Π²Π΅Π΄Π΅Π²Π°