ΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° статия Π·Π° ускоряванС Π½Π° рСфлСксията

Π’Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ обясня Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° статията. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ бСшС ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Π΄Π° Π΄Π°ΠΌ Π΄ΠΎΠ±ΡŠΡ€, Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΡΡŠΠ²Π΅Ρ‚ Π·Π° ускоряванС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСфлСксията с прост, Π½ΠΎ рСалистичСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ Π² Ρ…ΠΎΠ΄Π° Π½Π° Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³Π° сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ рСфлСксията Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π±Π°Π²Π½ΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ мислСх, Π° LINQ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ‚ ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ Π² ΠΌΠΎΠΈΡ‚Π΅ Π½Π°ΠΉ-лоши Π²ΠΈΠ·ΠΈΠΈ. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ допуснах ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π² измСрванията… ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Π·Π° Ρ‚Π°Π·ΠΈ ТитСйска история ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ ΠΈ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅. ПонСТС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΠΈΡ‚ΠΎΠ² ΠΈ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΏΠΎ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π² прСдприятиСто, сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ интСрСсна, ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΌΠΈ сС струва, дСмонстрация Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π°: влияниСто Π²ΡŠΡ€Ρ…Ρƒ скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° основния ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π½Π° статията Π½Π΅ бСшС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ Π·Π°Ρ€Π°Π΄ΠΈ Π²ΡŠΠ½ΡˆΠ½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°: Moq, Autofac, EF Core ΠΈ Π΄Ρ€ΡƒΠ³Π° β€žΠΎΠ±Π²ΠΈΠ²ΠΊΠ°β€œ.

Π—Π°ΠΏΠΎΡ‡Π½Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ΄ влияниСто Π½Π° Ρ‚Π°Π·ΠΈ статия: Π—Π°Ρ‰ΠΎ рСфлСксията Π΅ Π±Π°Π²Π½Π°

ΠšΠ°ΠΊΡ‚ΠΎ Π΅ Π²ΠΈΠ΄Π½ΠΎ, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ скомпилирани Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΈ вмСсто Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ обращСния към ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ускоряванС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Има ΠΎΡ‰Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, IL Смисия, Π½ΠΎ Π±ΠΈΡ… искал Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π°ΠΉ-трудоСмкият Π½Π°Ρ‡ΠΈΠ½ Π·Π° изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€Π΅Π΄Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ към Π³Ρ€Π΅ΡˆΠΊΠΈ.

ΠšΠ°Ρ‚ΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π²ΠΈΠ½Π°Π³ΠΈ съм ΠΈΠΌΠ°Π» ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π·Π° скоростта Π½Π° рСфлСксията, Π½Π΅ смятах Π΄Π° оспорвам ΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π°.

ЧСсто срСщам Π½Π°ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСфлСксията Π² прСдприятиСто. Π’Π·Π΅ΠΌΠ° сС Ρ‚ΠΈΠΏ. Π’Π·Π΅ΠΌΠ° сС информация Π·Π° свойството. Извиква сС ΠΌΠ΅Ρ‚ΠΎΠ΄ SetValue, ΠΈ всички сС Ρ€Π°Π΄Π²Π°Ρ‚. Бтойността Π΅ стигнала Π΄ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅, всички са Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ. Π₯ΠΎΡ€Π°Ρ‚Π° са доста ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ β€” синиори ΠΈ Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Π΅Ρ€ΠΈ β€” ΠΏΠΈΡˆΠ°Ρ‚ своитС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° object, основавайки сС Π½Π° Ρ‚Π°ΠΊΠ°Π²Π° Π½Π°ΠΈΠ²Π½Π° рСализация Π½Π° β€žΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»Π½ΠΈβ€œ ΠΌΠ°ΠΏΠ΅Ρ€ΠΈ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π² Π΄Ρ€ΡƒΠ³. Π‘ΡƒΡ‚ΠΈΡ€Ρ‚Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Ρ‚Π°ΠΊΠ°Π²Π°: Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ всички ΠΏΠΎΠ»Π΅Ρ‚Π°, Π²Π·Π΅ΠΌΠ°ΠΌΠ΅ всички свойства, ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΡ€Π΅Π· тях: ΠΏΡ€ΠΈ совпадСниС Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‡Π»Π΅Π½ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠ° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ SetValue. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ улавямС ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ пропуски Ρ‚Π°ΠΌ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π΅ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ някакво свойство Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, Π½ΠΎ ΠΈ Ρ‚ΡƒΠΊ ΠΈΠΌΠ° ΠΈΠ·Ρ…ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ повишава производитСлността. Try/catch.

Видях ΠΊΠ°ΠΊ Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΏΡ€Π΅ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚ парсСри ΠΈ ΠΌΠ°ΠΏΠ΅Ρ€ΠΈ, Π±Π΅Π· Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ‚ напълно с информация ΠΊΠ°ΠΊ работят вСлосипСдитС, ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ тях. Видях ΠΊΠ°ΠΊ Ρ…ΠΎΡ€Π°Ρ‚Π° крият своитС Π½Π°ΠΈΠ²Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄ стратСгии, интСрфСйси ΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡ†ΠΈΠΈ, всС Π΅Π΄Π½ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π΅ послСдващата вакханалия. ΠžΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сС ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π²Π°ΠΌ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π½Π΅ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ… истинския leak Π½Π° производитСлността ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ бСшС възмоТно, просто смСнях рСализацията с ΠΏΠΎ "ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π°", ΠΊΠΎΠ³Π°Ρ‚ΠΎ стигах Π΄ΠΎ нСя. Π—Π°Ρ‚ΠΎΠ²Π° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ измСрвания, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ говоря ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, сСриозно ΠΌΠ΅ смутиха.

Мисля, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ вас, Ρ‡Π΅Ρ‚Π΅ΠΉΠΊΠΈ Π ΠΈΡ…Ρ‚Π΅Ρ€ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ·ΠΈ, са сС сблъсквали с напълно справСдливото ΡƒΠΏΡ€Π΅ΠΊ, Ρ‡Π΅ рСфлСксията Π² ΠΊΠΎΠ΄Π° Π΅ явлСниС, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠΊΠ°Π·Π²Π° ΠΊΡ€Π°ΠΉΠ½ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ влияниС Π½Π° производитСлността Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π˜Π·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСфлСксия ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° CLR Π΄Π° ΠΎΠ±Ρ…ΠΎΠ΄ΠΈ сборкитС Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π½ΡƒΠΆΠ½Π°Ρ‚Π°, Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈΠΌ, Π΄Π° Π³ΠΈ парснС ΠΈ Ρ‚.Π½. ОсвСн Ρ‚ΠΎΠ²Π° рСфлСксията ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΎΠ±Ρ…ΠΎΠ΄ Π½Π° послСдоватСлности Π²ΠΎΠ΄ΠΈ Π΄ΠΎ алокация Π½Π° голям ΠΎΠ±Π΅ΠΌ ΠΏΠ°ΠΌΠ΅Ρ‚. Π˜Π·Ρ€Π°Π·Ρ…ΠΎΠ΄Π²Π°ΠΉΠΊΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚, CLR Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° GC ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ забавяния. Π’ΠΎΠ²Π° трябва Π΄Π° бъдС Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ Π±Π°Π²Π½ΠΎ, повярвайтС. ΠžΠ³Ρ€ΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΌΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½ΠΈ машини Π½Π΅ спасяват ΠΎΡ‚ високи закъснСния Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-висока Π΅ вСроятността Π΄Π° Π—ΠΠ‘Π•Π›Π•Π–Π˜Π’Π• ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ GC. РСфлСксията Π΅, ΠΏΠΎ идСя, излишна Ρ‡Π΅Ρ€Π²Π΅Π½Π° ΠΊΡŠΡ€ΠΏΠ° Π·Π° Π½Π΅Π³ΠΎ.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, всички Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΈ Π΄Π°Ρ‚Π° ΠΌΠ°ΠΏΠ΅Ρ€ΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰ΠΎ Π΅ основан Π½Π° рСфлСксия, Π½ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ няма Π²ΡŠΠΏΡ€ΠΎΡΠΈ Π·Π° тяхната производитСлност. НС, Π½Π΅ Π·Π°Ρ‰ΠΎΡ‚ΠΎ внСдряванСто Π½Π° зависимости ΠΈ абстрахиранСто ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° външСн ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ контСкст са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π½Π΅Ρ‰Π°, Ρ‡Π΅ трябва Π΄Π° ΠΆΠ΅Ρ€Ρ‚Π²Π°Ρ‚ производитСлността ΠΏΠΎ ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ Π½Π°Ρ‡ΠΈΠ½. Всичко Π΅ ΠΏΠΎ-просто – наистина Π½Π΅ ΠΎΠΊΠ°Π·Π²Π°Ρ‚ голямо влияниС Π½Π° производитСлността.

Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Π² Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π½Π°ΠΉ-разпространСнитС Ρ„Ρ€Π΅ΠΉΠΌΡƒΠΎΡ€Ρ†ΠΈ, основани Π½Π° тСхнологията Π½Π° рСфлСксията, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ всякакви хитрости Π·Π° ΠΏΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с нСя. ОбикновСно Ρ‚ΠΎΠ²Π° Π΅ кСш. ОбикновСно – Ρ‚ΠΎΠ²Π° са Expressions ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ Π΄ΡŠΡ€Π²ΠΎ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΈ. Π‘ΡŠΡ‰ΠΈΡΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°ΠΏΠ΅Ρ€ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π΅Π½ Ρ€Π΅Ρ‡Π½ΠΈΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠΏΠΎΡΡ‚Π°Π²Ρ Ρ‚ΠΈΠΏΠΎΠ²Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Ρ‚ Π΅Π΄ΠΈΠ½ Π² Π΄Ρ€ΡƒΠ³ Π±Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° рСфлСксия.

Как сС постига Ρ‚ΠΎΠ²Π°? По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ, Ρ‚ΠΎ Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΎΡ‚ самата ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° JIT ΠΊΠΎΠ΄. ΠŸΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚ΠΎΠΉ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° (ΠΈ Π΄Π°, Ρ‚ΠΎΠ·ΠΈ процСс Π½Π΅ Π΅ Π±ΡŠΡ€Π·), Π° ΠΏΡ€ΠΈ послСдващитС извиквания ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° Π²Π΅Ρ‡Π΅ компилирания ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ Ρ‚ΡƒΠΊ Π½Π΅ Π±ΠΈ трябвало Π΄Π° ΠΈΠΌΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ спадовС Π² производитСлността.

Π’ нашия случай ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΡ‰ΠΎ JIT компилация ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ с производитСлност, Ρ€Π°Π²Π½Π° Π½Π° AOT Π°Π½Π°Π»ΠΎΠ·ΠΈΡ‚Π΅. На ΠΏΠΎΠΌΠΎΡ‰ Ρ‰Π΅ Π½ΠΈ Π΄ΠΎΠΉΠ΄Π°Ρ‚ ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅.

ΠšΡ€Π°Ρ‚ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ, ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:
Врябва Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΠΌΠ΅ крайния Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° рСфлСксията ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π΄Π΅Π»Π΅Π³Π°Ρ‚, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π° функция. Всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с информация Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π΄Π° сС ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚ Π² ΠΏΠΎΠ»Π΅Ρ‚Π° извън ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° вашия Ρ‚ΠΈΠΏ – Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ.

Има Π»ΠΎΠ³ΠΈΠΊΠ° Π² Ρ‚ΠΎΠ²Π°. Здравият Ρ€Π°Π·ΡƒΠΌ Π½ΠΈ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π°ΠΊΠΎ Π½Π΅Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΎ ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎ, трябва Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ.

ΠžΡ‰Π΅ Π² Π½Π°ΠΏΡ€Π΅Π΄, трябва Π΄Π° сС ΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ ΠΊΠ΅ΡˆΡŠΡ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с рСфлСксия ΠΈΠΌΠ° своитС прСдимства, Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° мСтодология Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ‚ΡƒΠΊ Ρ‰Π΅ повторя Ρ‚Π΅Π·ΠΈΡ‚Π΅ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° статията, Π½Π° която сС ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΌ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

Π‘Π΅Π³Π° Π·Π° ΠΊΠΎΠ΄Π°. НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ сС основава Π½Π° моята Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π°ΡˆΠ½Π° Π±ΠΎΠ»ΠΊΠ°, с която сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ… Π² сСриозСн производствСн случай Π² сСриозна ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Π° организация. Всички Π΅Π½Ρ‚ΠΈΡ‚ΠΈ са измислСни, Π·Π° Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π½ΠΈΠΊΠΎΠΉ Π΄Π° ΠΏΠΎΠ·Π½Π°Π΅.

Има някаква ΡΡŠΡ‰Π½ΠΎΡΡ‚. НСка Π΅ Contact. Има писма със стандартизирано ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠ°Ρ€ΡΠ΅Ρ€ΡŠΡ‚ ΠΈ Ρ…ΠΈΠ΄Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ писмо, ΠΏΡ€ΠΎΡ‡Π΅Ρ‚ΠΎΡ…ΠΌΠ΅ Π³ΠΎ, Ρ€Π°Π·Π±ΠΈΡ…ΠΌΠ΅ Π½Π° Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠ»ΡŽΡ‡-стойност, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠΈ Π³ΠΎ Π·Π°ΠΏΠ°Π·ΠΈΡ…ΠΌΠ΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

Π’ΠΎΠ²Π° Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΠΎ. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° свойства ИмС, Π’ΡŠΠ·Ρ€Π°ΡΡ‚ ΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€. Π’Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π² писмото. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π±ΠΈΠ·Π½Π΅ΡΡŠΡ‚ иска, Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠΈΡ‚Π΅ Π΄Π° добавят Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° отразяванС Π½Π° свойствата Π½Π° Π΅Π½Ρ‚ΠΈΡ‚ΠΈ Π½Π° Π΄Π²ΠΎΠΉΠΊΠΈ Π² ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° писмото. Π—Π° всСки случай, Π°ΠΊΠΎ някой Π΅ допуснал Π³Ρ€Π΅ΡˆΠΊΠ° Π² шаблона ΠΈΠ»ΠΈ Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ€Π΅Π»ΠΈΠ·Π° трябва спСшно Π΄Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° отразяванС ΠΎΡ‚ Π½ΠΎΠ² ΠΏΠ°Ρ€Ρ‚Π½ΡŒΠΎΡ€, Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°ΠΉΠΊΠΈ сС към новия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π’ΠΎΠ³Π°Π²Π° Π½ΠΎΠ²Π°Ρ‚Π° корСлация Π½Π° отразяванСто ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°Ρ‚ΠΎ Π΅Π²Ρ‚ΠΈΠ½ датафикс. ВоСст, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π°.

Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅, създавамС тСстовС. Π Π°Π±ΠΎΡ‚ΠΈ.

Кода няма Π΄Π° прСдставя: ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ†ΠΈΡ‚Π΅ станаха ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² GitHub Π½Π° Π»ΠΈΠ½ΠΊΠ° Π² края Π½Π° статията. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅, Π΄Π° Π³ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ Π΄ΠΎ нСузнаваСмост ΠΈ Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° Π±ΠΈ сС ΠΎΡ‚Ρ€Π°Π·ΠΈΠ»ΠΎ Π½Π° вашия случай. Π©Π΅ прСдставя само ΠΊΠΎΠ΄Π° Π½Π° Π΄Π²Π° шаблонни ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, с ΠΊΠΎΠΈΡ‚ΠΎ Ρ…ΠΈΠ΄Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° бъдС Π±ΡŠΡ€Π·, сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Ρ…ΠΈΠ΄Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° бъдС Π±Π°Π²Π΅Π½.

Π›ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π΅ слСдната: ΡˆΠ°Π±Π»ΠΎΠ½Π½ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Π΄Π²ΠΎΠΉΠΊΠΈ, Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° парсСра. Нивото Π½Π° LINQ Π΅ ΠΏΠ°Ρ€ΡΠ΅Ρ€ΡŠΡ‚ ΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Ρ…ΠΈΠ΄Ρ€Π°Ρ‚ΠΎΡ€Π°, която ΠΏΡ€Π°Π²ΠΈ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΡŠΠΏΠΎΡΡ‚Π°Π²Ρ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ с Π΄Π²ΠΎΠΉΠΊΠΈΡ‚Π΅ ΠΎΡ‚ парсСра (Π·Π° Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ° ΠΊΠΎΠ΄ Π±Π΅Π· LINQ Π·Π° сравнСниС). Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π΄Π²ΠΎΠΉΠΊΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π½Π° основния ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ…ΠΈΠ΄Ρ€Π°Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΈ стойноститС Π½Π° свойствата сС Π·Π°Π΄Π°Π²Π°Ρ‚ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ свойства Π½Π° Π΅Π½Ρ‚ΠΈΡ‚ΠΈΡ‚ΠΎ.

"Π‘ΡŠΡ€Π·" (прСфикс Fast Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅Ρ‚Π΅):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° статична колСкция със сСттСри Π½Π° свойства – ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈ Π»Π°ΠΌΠ±Π΄ΠΈ, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰ΠΈ сСттСр Π½Π° Π΅Π½Ρ‚ΠΈΡ‚ΠΈΡ‚ΠΎ. Π’Π΅ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ с слСдния ΠΊΠΎΠ΄:

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

Π’ основни Π»ΠΈΠ½ΠΈΠΈ Π΅ ясно. ΠžΠ±Ρ…ΠΎΠΆΠ΄Π°ΠΌΠ΅ свойствата, създавамС Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΈ, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰ΠΈ сСттСритС, ΠΈ Π³ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π³ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

"Π‘Π°Π²Π΅Π½" (прСфикс Slow Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅Ρ‚Π΅):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

Π’ΡƒΠΊ Π²Π΅Π΄Π½Π°Π³Π° ΠΎΠ±Ρ…ΠΎΠΆΠ΄Π°ΠΌΠ΅ свойствата ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ SetValue.

Π—Π° ΠΏΠΎ ясност ΠΈ ΠΊΠ°Ρ‚ΠΎ Π΅Ρ‚Π°Π»ΠΎΠ½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ… Π½Π°ΠΈΠ²Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ записва стойноститС Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΊΠΎΡ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° Π½Π° Π΅Π½Ρ‚ΠΈΡ‚ΠΈ. ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ – Manual.

Π‘Π΅Π³Π° Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ BenchmarkDotNet ΠΈ изслСдвамС производитСлността. И внСзапно… (спойлСр β€” Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ правилният Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, подробности β€” ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ)

ΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° статия Π·Π° ускоряванС Π½Π° рСфлСксията

Какво Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΡƒΠΊ? ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅, носСщи побСдоносно прСфикса Fast, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€ΠΈ всички прСминавания сС ΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΏΠΎ-Π±Π°Π²Π½ΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ с прСфикса Slow. Π’ΠΎΠ²Π° Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° алокацията, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, красивата ΠΈ Π΅Π»Π΅Π³Π°Π½Ρ‚Π½Π° рСализация Π½Π° ΠΌΠ°ΠΏΠΈΠ½Π³Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰Π° навсякъдС, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ възмоТно, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ LINQ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, силно ΠΏΠΎΠ½ΠΈΠΆΠ°Π²Π° производитСлността. Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π°. ВСндСнцията Π½Π΅ сС промСня с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΡ‚ΠΎ количСство прСминавания. Π Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° Π΅ само Π² ΠΌΠ°Ρ‰Π°Π±ΠΈΡ‚Π΅. Π‘ LINQ Π² 4 β€” 200 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, Π° Π±ΠΎΠΊΠ»ΡƒΠΊΡŠΡ‚ Π΅ Π² ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΈΡ‚Π΅ ΠΌΠ°Ρ‰Π°Π±ΠΈ.

UPDATE

НС ΠΌΠΎΠΆΠ΅Ρ… Π΄Π° повярвам Π½Π° ΠΎΡ‡ΠΈΡ‚Π΅ си, Π½ΠΎ ΠΏΠΎ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΈΡ‚Π΅ ΠΎΡ‡ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ моят ΠΊΠΎΠ΄ Π½Π΅ повярваха Π½Π° нашия ΠΊΠΎΠ»Π΅Π³Π° β€” Dmitry Tikhonov 0x1000000. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° ΠΌΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎΠΉ блСстящо ΠΎΡ‚ΠΊΡ€ΠΈ ΠΈ посочи Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°, която бях пропуснал Π·Π°Ρ€Π°Π΄ΠΈ Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² рСализацията ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π΄ΠΎ края. Π‘Π»Π΅Π΄ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° открития бъг Π² настройкитС Π½Π° Moq, всички Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π°Π΅Ρ…Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ си мСста. Π‘ΠΏΠΎΡ€Π΅Π΄ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ тСстванС основната тСндСнция Π½Π΅ сС промСня β€” LINQ влияС Π½Π° производитСлността всС ΠΏΠ°ΠΊ ΠΏΠΎ-силно ΠΎΡ‚ рСфлСксията. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° Π΅ приятно, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с компилацията Π½Π° Expression-ΠΈΡ‚Π΅ Π½Π΅ Π΅ Π±ΠΈΠ»Π° Π½Π°ΠΏΡ€Π°Π·Π½Π°, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ алокацията, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΡ€ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡΡ‚ стартиран, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ статичнитС ΠΏΠΎΠ»Π΅Ρ‚Π°, Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Π΅ ΠΏΠΎ-Π±Π°Π²Π΅Π½ ΠΏΡ€ΠΈ β€žΠ±ΡŠΡ€Π·ΠΈΡβ€œ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ слСд Ρ‚ΠΎΠ²Π° ситуацията сС промСня.

Π•Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ тСстванС:

ΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° статия Π·Π° ускоряванС Π½Π° рСфлСксията

Извод: ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСфлСксия Π² прСдприятията Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС прибягва Π΄ΠΎ хитрости β€” LINQ Ρ‰Π΅ изядС производитСлността ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-силно. ВсС ΠΏΠ°ΠΊ, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ с висока натоварСност, изискващи оптимизация, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ рСфлСксията ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎ-късно Ρ‰Π΅ осигурят β€žΠ±ΡŠΡ€Π·Π°Ρ‚Π°β€œ Π»ΠΎΠ³ΠΈΠΊΠ°. Π’Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ ΠΈ Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚Ρ‚Π° Π½Π° рСфлСксията, ΠΈ скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠšΠΎΠ΄ΡŠΡ‚ с Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Ρ‚ΡƒΠΊ. Всички ΠΆΠ΅Π»Π°Π΅Ρ‰ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° провСрят ΠΌΠΎΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ:
HabraReflectionTests

PS: ΠšΠΎΠ΄ΡŠΡ‚ Π² тСстовСтС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° IoC, Π° Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ²Π΅Ρ‚Π΅ – явна конструкция. Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ, Ρ‡Π΅ Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½Π°Ρ‚Π° рСализация ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ… всички Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° повлияят Π½Π° производитСлността ΠΈ Π΄Π° Π·Π°ΠΌΡŠΠ³Π»ΡΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°.

PPS: Благодаря Π½Π° потрСбитСля Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π’ΠΈΡ…ΠΎΠ½ΠΎΠ² @0x1000000 Π·Π° откритията Π½Π° моята Π³Ρ€Π΅ΡˆΠΊΠ° Π² настройкитС Π½Π° Moq, която повлия Π½Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ измСрвания. Ако някой ΠΎΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΊΠ°Ρ€ΠΌΠ°, моля, Π΄Π°ΠΉΡ‚Π΅ ΠΌΡƒ Π»Π°ΠΉΠΊ. Π§ΠΎΠ²Π΅ΠΊΡŠΡ‚ сС спря, Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚ сС Π²Π³Π»Π΅Π΄Π°, Ρ‡ΠΎΠ²Π΅ΠΊΡŠΡ‚ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° ΠΈ посочи Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°. Π‘Ρ‡ΠΈΡ‚Π°ΠΌ, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ достойно Π·Π° ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ симпатия.

PPPS: Благодаря Π½Π° вниматСлния Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ сС заяТда с стилистиката ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Аз съм Π·Π° Сдинство ΠΈ удобство. Дипломатичността Π½Π° прСдставянСто оставя ΠΌΠ½ΠΎΠ³ΠΎ Π·Π° ΠΆΠ΅Π»Π°Π½Π΅, Π½ΠΎ Π²Π·Π΅Ρ… ΠΏΠΎΠ΄ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°. Моля, ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към Ρ‚Π΅ΠΌΠ°Ρ‚Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster