ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички! Π’Π°Π·ΠΈ статия Π΅ сборник ΠΎΡ‚ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π°Π· ΠΈ ΠΌΠΎΠΈΡ‚Π΅ ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΠΌΠ΅ ΠΎΡ‚ дълго Π²Ρ€Π΅ΠΌΠ΅ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π·Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, Π½Π° която са ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈ прСсмятанията:BenchmarkDotNet=v0.11.5, ОБ=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 логичСски ΠΈ 4 физичСски ядра
.NET Core SDK=3.0.100
[Host]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Core: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Host]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Core: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Core Runtime=Core

ToList срСщу ToArray ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ


ΠŸΠ»Π°Π½ΠΈΡ€Π°Ρ… Π΄Π° подготвя Ρ‚Π°Π·ΠΈ информация със ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° .NET Core 3.0, Π½ΠΎ ΠΌΠ΅ ΠΈΠ·ΠΏΡ€Π΅Π²Π°Ρ€ΠΈΡ…Π°, Π½Π΅ искам Π΄Π° ΠΊΡ€Π°Π΄Π° Ρ‡ΡƒΠΆΠ΄Π° слава ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌ Ρ‡ΡƒΠΆΠ΄Π° информация, Π·Π°Ρ‚ΠΎΠ²Π° просто Ρ‰Π΅ посоча Π²Ρ€ΡŠΠ·ΠΊΠ° към Π΄ΠΎΠ±Ρ€Π° статия, Π² която ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π΅ описано сравнСниСто.

ΠžΡ‚ сСбС си само искам Π΄Π° прСдставя измСрванията ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ си, Π΄ΠΎΠ±Π°Π²ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ†ΠΈΠΊΠ»ΠΈ Π·Π° Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° β€œC++ стил” Π½Π° писанС Π½Π° Ρ†ΠΈΠΊΠ»ΠΈ.

Код:

public class Bench
    {
        private List<int> _list;
        private int[] _array;

        [Params(100000, 10000000)] public int N;

        [GlobalSetup]
        public void Setup()
        {
            const int MIN = 1;
            const int MAX = 10;
            Random random = new Random();
            _list = Enumerable.Repeat(0, N).Select(i => random.Next(MIN, MAX)).ToList();
            _array = _list.ToArray();
        }

        [Benchmark]
        public int ForList()
        {
            int total = 0;
            for (int i = 0; i < _list.Count; i++)
            {
                total += _list[i];
            }

            return total;
        }
        
        [Benchmark]
        public int ForListFromEnd()
        {
            int total = 0;t
            for (int i = _list.Count-1; i > 0; i--)
            {
                total += _list[i];
            }

            return total;
        }

        [Benchmark]
        public int ForeachList()
        {
            int total = 0;
            foreach (int i in _list)
            {
                total += i;
            }

            return total;
        }

        [Benchmark]
        public int ForeachArray()
        {
            int total = 0;
            foreach (int i in _array)
            {
                total += i;
            }

            return total;
        }

        [Benchmark]
        public int ForArray()
        {
            int total = 0;
            for (int i = 0; i < _array.Length; i++)
            {
                total += _array[i];
            }

            return total;
        }
        
        [Benchmark]
        public int ForArrayFromEnd()
        {
            int total = 0;
            for (int i = _array.Length-1; i > 0; i--)
            {
                total += _array[i];
            }

            return total;
        }
    }

Бкоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² .NET Core 2.2 ΠΈ 3.0 Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π°. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ успях Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π° Π² .NET Core 3.0:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

МоТСм Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠΌ, Ρ‡Π΅ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° колСкция ΠΎΡ‚ Ρ‚ΠΈΠΏ Array Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·Π° Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ си ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ясното опрСдСлянС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° колСкцията. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° забравямС, Ρ‡Π΅ колСкцията Ρ‚ΠΈΠΏ List ΠΈΠΌΠ° свои прСдимства ΠΈ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ подходящата колСкция Π² зависимост ΠΎΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ изчислСния. Π”ΠΎΡ€ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ†ΠΈΠΊΠ»ΠΈΡ‚Π΅, Π½Π΅ забравяйтС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ loop ΠΈ ΡΡŠΡ‰ΠΎ Π΅ ΠΏΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ Π½Π° възмоТна оптимизация. На habr ΠΎΡ‚Π΄Π°Π²Π½Π° ΠΈΠ·Π»Π΅Π·Π΅ статия: https://habr.com/ru/post/124910/. Вя всС ΠΎΡ‰Π΅ Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° ΠΈ сС ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅.

Throw

ΠŸΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ… Π² компания Π²ΡŠΡ€Ρ…Ρƒ legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° валидацията Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π° Ρ‡Ρ€Π΅Π· конструкцията try-catch-throw бСшС Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ. Π’Π΅Ρ‡Π΅ Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ…, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ нСздравословна бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ… Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚Π°ΠΊΠ°Π²Π° конструкция. Но Π½Π΅ΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‰ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ с Ρ‚Π°ΠΊΠ°Π²Π° конструкция Π΅ лош. Написах малък ΠΊΠΎΠ΄, Π·Π° Π΄Π° сравня Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ… 'Π±Π΅Π½Ρ‡ΠΎΠ²Π΅' Π·Π° всСки Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Код:

        public bool ContainsHash()
        {
            bool result = false;
            foreach (var file in _files)
            {
                var extension = Path.GetExtension(file);
                if (_hash.Contains(extension))
                    result = true;
            }

            return result;
        }

        public bool ContainsHashTryCatch()
        {
            bool result = false;
            try
            {
                foreach (var file in _files)
                {
                    var extension = Path.GetExtension(file);
                    if (_hash.Contains(extension))
                        result = true;
                }
                
                if(!result) 
                    throw new Exception("false");
            }
            catch (Exception e)
            {
                result = false;
            }

            return result;
        }

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ Π² .NET Core 3.0 ΠΈ Core 2.2 ΠΈΠΌΠ°Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ (.NET Core 3.0):

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Try catch услоТнява Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Но Π°ΠΊΠΎ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Ρ‚Π°Π·ΠΈ конструкция, Π½Π΅ Π²ΠΌΡŠΠΊΠ²Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС ΠΎΡ‡Π°ΠΊΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ β€” Ρ‚ΠΎΠ²Π° Ρ‰Π΅ улСсни Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, систСмата Π½Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° самитС Π³Ρ€Π΅ΡˆΠΊΠΈ Ρ‡Ρ€Π΅Π· конструкцията throw new Exception.

Π˜Π·Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ‚ някакъв клас, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΡΡŠΠ±Π΅Ρ€Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π² нСобходимия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Ако ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ някакви Π΄Π°Π½Π½ΠΈ ΠΈ явно Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²Π° Π³Ρ€Π΅ΡˆΠΊΠ° трябва Π΄Π° бъдС, Π·Π°Ρ‰ΠΎ Π΄Π° Π½Π΅ я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅?

НС ΠΏΠΈΡˆΠ΅Ρ‚Π΅ конструкция throw new Exception(), Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ ситуация Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ струва ΠΌΠ½ΠΎΠ³ΠΎ!!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 5-годишния си ΠΎΠΏΠΈΡ‚ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° .NET съм срСщал ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° видях слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°: имашС Π΅Π΄Π½ΠΎ Enterprise Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, всСки ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π°ΡˆΠ΅ сравнСниСто Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ. Но ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅? Π’ ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° CLR via C# Π½Π° Π ΠΈΡ…Ρ‚Π΅Ρ€ ΠΎΡ‚ΠΊΡ€ΠΈΡ… информация, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ ToUpperInvariant() Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΎΡ‚ ToLowerInvariant().

Извадка ΠΎΡ‚ ΠΊΠ½ΠΈΠ³Π°Ρ‚Π°:

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ повярвах ΠΈ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π° някои тСстовС Π½Π° .NET Framework ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΌΠ΅ ΡˆΠΎΠΊΠΈΡ€Π° – Π½Π°Π΄ 15% ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° производитСлността. На слСдващата сутрин ΠΏΠΎΠΊΠ°Π·Π°Ρ… Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° своя ΡˆΠ΅Ρ„ ΠΈ ΠΈΠΌ прСдоставих Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ изходния ΠΊΠΎΠ΄. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° 2 ΠΎΡ‚ 14 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° бяха ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ Π·Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ измСрвания, Π° ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ Π΄Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ…Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ Excel Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ бСшС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠΌ Π²ΠΈ ΠΈ измСрвания Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° .NET Core, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ всСки ΠΎΡ‚ вас Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π² ΠΏΠΎΠ»Π·Π° Π½Π° Π½Π°ΠΉ-ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Искам само Π΄Π° добавя, Ρ‡Π΅ Π² компанията, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ работя, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ToUpper() Π·Π° сравнСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅.

Код:

public const string defaultString =  "VXTDuob5YhummuDq1PPXOHE4PbrRjYfBjcHdFs8UcKSAHOCGievbUItWhU3ovCmRALgdZUG1CB0sQ4iMj8Z1ZfkML2owvfkOKxBCoFUAN4VLd4I8ietmlsS5PtdQEn6zEgy1uCVZXiXuubd0xM5ONVZBqDu6nOVq1GQloEjeRN8jXrj0MVUexB9aIECs7caKGddpuut3";

        [Benchmark]
        public bool ToLower()
        {
            return defaultString.ToLower() == defaultString.ToLower();
        }

        [Benchmark]
        public bool ToLowerInvariant()
        {
            return defaultString.ToLowerInvariant() == defaultString.ToLowerInvariant();
        }

        [Benchmark]
        public bool ToUpper()
        {
            return defaultString.ToUpper() == defaultString.ToUpper();
        }

        [Benchmark]
        public bool ToUpperInvariant()
        {
            return defaultString.ToUpperInvariant() == defaultString.ToUpperInvariant();
        }

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Π’ .NET Core 3.0 ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° всСки ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π΅ ~x2 ΠΈ балансира Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Tier Compilation

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° си статия описах Ρ‚ΠΎΠ·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ, искам Π΄Π° поправя ΠΈ допълня своитС Π΄ΡƒΠΌΠΈ. ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½Π°Ρ‚Π° компилация ускорява Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π½Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΆΠ΅Ρ€Ρ‚Π²Π°Ρ‚Π΅ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ частитС ΠΎΡ‚ вашия ΠΊΠΎΠ΄ Ρ‰Π΅ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚ Π² ΠΏΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° вСрсия Π½Π° Π·Π°Π΄Π΅Π½ ΠΏΠ»Π°Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ. Π‘ ΠΈΠ΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° .NET Core 3.0 Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° многостСпСнна компилация намалява ΠΈ Π±ΡŠΠ³ΠΎΠ²Π΅Ρ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Ρ‚Π°Π·ΠΈ тСхнология, са ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΈ. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚Π°Π·ΠΈ тСхнология водСшС Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ заявки Π² ASP.NET Core ΠΈ Π΄ΠΎ забавяния ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π° компилация Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° многостСпСнна компилация. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² .NET Core 3.0 тя Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° я ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠΎ вашС ΠΆΠ΅Π»Π°Π½ΠΈΠ΅. Ако стС Π½Π° позиция team-lead, senior, middle ΠΈΠ»ΠΈ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° ΠΎΡ‚Π΄Π΅Π», трябва Π΄Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅, Ρ‡Π΅ Π±ΡŠΡ€Π·Π°Ρ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° цСнността Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΈ Ρ‚Π°Π·ΠΈ тСхнология Ρ‰Π΅ Π²ΠΈ спСсти Π²Ρ€Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° самото Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

.NET Π½ΠΈΠ²ΠΎ Π½Π°Π³ΠΎΡ€Π΅

ΠŸΠΎΠ²ΠΈΡˆΠ΅Ρ‚Π΅ вСрсията Π½Π° вашия .NET Framework / .NET Core. ЧСсто всяка Π½ΠΎΠ²Π° вСрсия Π΄Π°Π²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€ΡŠΡΡ‚ Π² производитСлността ΠΈ добавя Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Но ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ са прСдимствата? НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ някои ΠΎΡ‚ тях:

  • Π’ .NET Core 3.0 сС появиха R2R ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π½Π° .NET Core прилоТСния.
  • Π‘ вСрсия 2.2 сС появи Tier Compilation, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° която програмиститС Ρ‰Π΅ отдСлят ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° стартиранС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π½ΠΎΠ²ΠΈ стандарти .NET Standard.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ – с всяка Π½ΠΎΠ²Π° вСрсия сС подобрява оптимизацията Π½Π° основнитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Collection / Struct / Stream / String / Regex ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ. Ако ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚Π΅ ΠΎΡ‚ .NET Framework Π½Π° .NET Core, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€ΡŠΡΡ‚ Π² производитСлността ΠΎΡ‚ самото Π½Π°Ρ‡Π°Π»ΠΎ. Π—Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π²Π°ΠΌ Π»ΠΈΠ½ΠΊ Π½Π° част ΠΎΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ бяха Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² .NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .NET Core

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ написванСто Π½Π° ΠΊΠΎΠ΄ трябва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° вашия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, Π·Π° Π΄Π° сС постигнС Π½Π°ΠΉ-добрия Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π©Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ, Π°ΠΊΠΎ сподСлитС своитС знания, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с оптимизацията Π² .NET.

Π›ΠΈΠ½ΠΊ към github

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

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