Performance in .NET Core

Performance in .NET Core

Performance in .NET Core

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

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π·Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, Π½Π° която са ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈ изчислСнията:BenchmarkDotNet=v0.11.5, OS=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 vs ToArray ΠΈ Ρ†ΠΈΠΊΠ»ΠΈ


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

ΠžΡ‚ своя страна искам просто Π΄Π° прСдставя ΠΌΠΎΠΈΡ‚Π΅ измСрвания ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΡ… Π² тях ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ»ΠΈ Π·Π° ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° "C++ стил" Π½Π° написванС Π½Π° Ρ†ΠΈΠΊΠ»ΠΈ.

Код:

public class Bench
    {
        private List _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  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  0; i--)
            {
                total += _array[i];
            }

            return total;
        }
    }

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

Performance in .NET Core

Performance in .NET Core

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

Throw

ΠŸΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ… Π² компания ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с наслСдство, Π² ΠΊΠΎΠΉΡ‚ΠΎ бСшС Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ Π΄Π° сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π° Ρ‡Ρ€Π΅Π· конструкцията 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):

Performance in .NET Core

Performance in .NET Core

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

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

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

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

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

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

Performance in .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();
        }

Performance in .NET Core

Performance in .NET Core

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

Performance in .NET Core

Performance in .NET Core

Tier Compilation

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

.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/

Performance in .NET Core

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

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

Π’Ρ€ΡŠΠ·ΠΊΠ° към github

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

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