Yandex.Metrika Counter

Начать работать с нами легко! Просто заполните заявку, и мы свяжемся с вами для обсуждения деталей.

Бюджет

НаТимая Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π²Ρ‹ Π΄Π°Ρ‘Ρ‚Π΅ согласиС Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚Π΅ΡΡŒ с ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ Π² .NET: ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π˜Ρ‚Π°ΠΊ, Ρƒ Β Π²Π°Ρ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ‑Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ. И Β Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ 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 ΠΈ Β Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Β ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Β ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Π·Π²Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ β€” ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π° Β ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈ Β Π²ΠΎΠ²ΡΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π½Π°ΠΌ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ систСмы, Π° Β Π·Π½Π°Ρ‡ΠΈΡ‚Β β€” ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ Тизнь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Β 


Автор: Антон Π’ΠΎΡ€ΠΎΡ‚Ρ‹Π½Ρ†Π΅Π²

Π Π΅Π΄Π°ΠΊΡ‚ΡƒΡ€Π°: ΠœΠ°Ρ€ΠΈΠ½Π° МСдвСдСва