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

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

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π² .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
[Π₯ост]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64-Π±ΠΈΡ‚ΠΎΠ² RyuJIT
Π―Π΄Ρ€ΠΎ: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Π₯ост]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64-Π±ΠΈΡ‚ΠΎΠ² RyuJIT
Π―Π΄Ρ€ΠΎ: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Core Runtime=Core

ToList срСщу ToArray ΠΈ Cycles


ΠŸΠ»Π°Π½ΠΈΡ€Π°Ρ… Π΄Π° подготвя Ρ‚Π°Π·ΠΈ информация с пусканСто Π½Π° .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

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

Π₯Π²ΡŠΡ€Π»ΡΠΌ

ΠŸΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ… Π² компания ΠΏΠΎ наслСдСн ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ бСшС Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ Π΄Π° сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅ Ρ‡Ρ€Π΅Π· конструкция 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 сС Π½Π°Ρ‚ΡŠΠΊΠ½Π°Ρ… Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ съвпадСниС Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅. Видях ΠΈ слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°: имашС Π΅Π΄Π½ΠΎ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, всСки ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΡˆΠ΅ сравнСния Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. Но ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΊΠ°ΠΊ Π΄Π° сС ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈ? Π’ ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° CLR Ρ‡Ρ€Π΅Π· C# ΠΎΡ‚ Richter ΠΏΡ€ΠΎΡ‡Π΅Ρ‚ΠΎΡ… информация, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ 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

ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ Π½Π° Π½ΠΈΠ²ΠΎ

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

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

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

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

  • .NET Core 3.0 прСдстави R2R изобраТСния, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ намалят Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° стартиранС Π½Π° .NET Core прилоТСния.
  • Π‘ вСрсия 2.2 сС появи Tier Compilation, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ програмиститС Ρ‰Π΅ отдСлят ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° стартиранС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ .NET стандарти.
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ, с всяка Π½ΠΎΠ²Π° вСрсия сС подобрява оптимизацията Π½Π° Π±Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€