.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░! рд╣рд╛ рд▓реЗрдЦ рд╕рд░реНрд╡реЛрддреНрдХреГрд╖реНрдЯ рдкрджреНрдзрддреАрдВрдЪрд╛ рд╕рдВрдЧреНрд░рд╣ рдЖрд╣реЗ рдЬреЗ рдорд╛рдЭреЗ рд╕рд╣рдХрд╛рд░реА рдЖрдгрд┐ рдореА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд.

рдЬреНрдпрд╛ рдорд╢реАрдирд╡рд░ рдЧрдгрдирд╛ рдХреЗрд▓реА рдЧреЗрд▓реА рддреНрдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 рд▓реЙрдЬрд┐рдХрд▓ рдЖрдгрд┐ 4 рднреМрддрд┐рдХ рдХреЛрд░
.NET рдХреЛрд░ SDK=3.0.100
[рд╣реЛрд╕реНрдЯ]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit 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), 64bit RyuJIT
рдХреЛрд░: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

рдЬреЙрдм=рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо=рдХреЛрд░

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 рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рдЖрдореНрд╣реА рдЕрд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдвреВ рд╢рдХрддреЛ рдХреА рдЕреЕрд░реЗ рдХрд▓реЗрдХреНрд╢рдирдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдореБрд│реЗ рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдЧреНрд░рд╣ рдЖрдХрд╛рд░ рд╡рд╛рдЯрдкрд╛рдореБрд│реЗ рдЬрд▓рдж рдЖрд╣реЗ. рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдХреА рд╕реВрдЪреА рд╕рдВрдХрд▓рдирд╛рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдлрд╛рдпрджреЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЖрдкрдг рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдпреЛрдЧреНрдп рд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рдЬрд░реА рдЖрдкрдг рд▓реВрдкрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рд▓рд┐рд╣рд┐рдд рдЕрд╕рд▓реЗ рддрд░реАрд╣реА, рд╣реЗ рд╡рд┐рд╕рд░реВ рдирдХрд╛ рдХреА рд╣реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реВрдк рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рд╕рдВрднрд╛рд╡реНрдп рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдЪреНрдпрд╛ рдЕрдзреАрди рдЖрд╣реЗ. рдЦреВрдк рдкреВрд░реНрд╡реА habr рд╡рд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛: https://habr.com/ru/post/124910/. рд╣реЗ рдЕрдЬреВрдирд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд╛рдЪрдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЖрд╣реЗ.

рдлреЗрдХрдгреЗ

рдПрдХ рд╡рд░реНрд╖рд╛рдкреВрд░реНрд╡реА, рдореА рдПрдХрд╛ рдХрдВрдкрдиреАрдд рд▓реЗрдЧрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╡рд░ рдХрд╛рдо рдХреЗрд▓реЗ рд╣реЛрддреЗ, рддреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдЯреНрд░рд╛рдп-рдХреЕрдЪ-рдереНрд░реЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрджреНрд╡рд╛рд░реЗ рдлреАрд▓реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддреЗ. рдорд▓рд╛ рдЖрдзреАрдЪ рд╕рдордЬрд▓реЗ рд╣реЛрддреЗ рдХреА рд╣реЗ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рдЕрд╕реНрд╡рд╕реНрде рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЬреЗрд╡реНрд╣рд╛ рд╢рдХреНрдп рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдореА рдЕрд╢рд╛ рдбрд┐рдЭрд╛рдЗрдирдЪрд╛ рд╡рд╛рдкрд░ рди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рдкрд░рдВрддреБ рдЕрд╢рд╛ рдмрд╛рдВрдзрдХрд╛рдорд╛рд╕рд╣ рддреНрд░реБрдЯреА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдЪрд╛ рджреГрд╖реНрдЯреАрдХреЛрди рдХрд╛ рд╡рд╛рдИрдЯ рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВрдпрд╛. рдореА рджреЛрди рдкрдзреНрджрддреАрдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реНрдпрд╛рдпрд╛рд╕рд╛рдареА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╡рд▓реЗ.

рдХреЛрдб:

        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 рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рдкрдХрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛ рдХреЛрдб рд╕рдордЬрдгреЗ рдХрдареАрдг рдмрдирд╡рддреЗ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рд╡рд╛рдврд╡рддреЗ. рдкрд░рдВрддреБ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдмрд╛рдВрдзрдХрд╛рдорд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рдХреЛрдбрдЪреНрдпрд╛ рддреНрдпрд╛ рдУрд│реА рдЯрд╛рдХреВ рдирдпреЗ рдЬреНрдпрд╛рдд рддреНрд░реБрдЯреА рд╣рд╛рддрд╛рд│рдгреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╛рд╣реА - рдпрд╛рдореБрд│реЗ рдХреЛрдб рд╕рдордЬрдгреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓. рдХрд┐рдВрдмрд╣реБрдирд╛, рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдиреЗ рд╕рд┐рд╕реНрдЯреАрдо рд▓реЛрдб рд╣реЛрдд рдирд╛рд╣реА, рддрд░ рдереНрд░реЛ рдиреНрдпреВ рдПрдХреНрд╕реЗрдкреНрд╢рди рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрджреНрд╡рд╛рд░реЗ рддреНрд░реБрдЯреА рд╕реНрд╡рддрдГрдЪ рдлреЗрдХрдгреЗ.

рдЕрдкрд╡рд╛рдж рдлреЗрдХрдгреЗ рдХрд╛рд╣реА рд╡рд░реНрдЧрд╛рдкреЗрдХреНрд╖рд╛ рд╣рд│реВ рдЖрд╣реЗ рдЬреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рддреНрд░реБрдЯреА рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрд▓. рдЬрд░ рддреБрдореНрд╣реА рдлреЙрд░реНрдо рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реА рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдд рдЕрд╕рд╛рд▓ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрд░рд░ рдХрд╛рдп рдЕрд╕рд╛рд╡реА рд╣реЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓ рддрд░ рддреНрдпрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд░реВ рдирдпреЗ?

рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЕрдкрд╡рд╛рджрд╛рддреНрдордХ рдирд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рдереНрд░реЛ рдиреНрдпреВ рдПрдХреНрд╕реЗрдкреНрд╢рди() рд░рдЪрдирд╛ рд▓рд┐рд╣реВ рдирдпреЗ. рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреЗ рдЖрдгрд┐ рдлреЗрдХрдгреЗ рдЦреВрдк рдорд╣рд╛рдЧ рдЖрд╣реЗ !!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

.NET рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рдЭреНрдпрд╛ рел рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рджрд░рдореНрдпрд╛рди, рдореА рдЕрдиреЗрдХ рдкреНрд░рдХрд▓реНрдк рдкрд╛рд╣рд┐рд▓реЗ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреБрд│рдгреА рд╡рд╛рдкрд░рд▓реА рдЧреЗрд▓реА. рдореА рдЦрд╛рд▓реАрд▓ рдЪрд┐рддреНрд░ рджреЗрдЦреАрд▓ рдкрд╛рд╣рд┐рд▓реЗ: рдЕрдиреЗрдХ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╕рд╣ рдПрдХ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рд╕реЛрд▓реНрдпреВрд╢рди рд╣реЛрддрд╛, рдЬреНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХрд╛рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХреЗрд▓реА. рдкрдг рдХрд╛рдп рд╡рд╛рдкрд░рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдПрдХрддреНрд░ рдХрд░рд╛рд╡реЗ? рд░рд┐рд╢реНрдЯрд░рдЪреНрдпрд╛ C# рджреНрд╡рд╛рд░реЗ CLR рдпрд╛ рдкреБрд╕реНрддрдХрд╛рдд, ToUpperInvariant() рдкрджреНрдзрдд ToLowerInvariant() рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд╡рд╛рди рдЕрд╕рд▓реНрдпрд╛рдЪреА рдорд╛рд╣рд┐рддреА рдореА рд╡рд╛рдЪрд▓реА.

рдкреБрд╕реНрддрдХрд╛рддреАрд▓ рдЙрддрд╛рд░рд╛:

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рдЕрд░реНрдерд╛рдд, рдореА рдпрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд▓рд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдирдВрддрд░ рдХрд╛рд╣реА рдЪрд╛рдЪрдгреНрдпрд╛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХрд╡рд░ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдорд╛рдореБрд│реЗ рдорд▓рд╛ рдзрдХреНрдХрд╛ рдмрд╕рд▓рд╛ - 15% рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдврд▓реА. рддреНрдпрд╛рдирдВрддрд░, рджреБрд╕рд▒реНрдпрд╛ рджрд┐рд╡рд╢реА рд╕рдХрд╛рд│реА рдХрд╛рдорд╛рд╡рд░ рдЖрд▓реНрдпрд╛рд╡рд░, рдореА рдорд╛рдЭреНрдпрд╛ рд╡рд░рд┐рд╖реНрдард╛рдВрдирд╛ рд╣реЗ рдореЛрдЬрдорд╛рдк рджрд╛рдЦрд╡рд▓реЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рджрд┐рд▓рд╛. рдпрд╛рдирдВрддрд░, рдирд╡реАрди рдореЛрдЬрдорд╛рдкрд╛рдВрдирд╛ рд╕рд╛рдорд╛рд╡реВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА 2 рдкреИрдХреА 14 рдкреНрд░рдХрд▓реНрдк рдмрджрд▓рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрдгрд┐ рд╣реЗ рджреЛрди рдкреНрд░рдХрд▓реНрдк рдкреНрд░рдЪрдВрдб рдПрдХреНрд╕реЗрд▓ рдЯреЗрдмрд▓реНрд╕рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗрдд рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдкрд░рд┐рдгрд╛рдо рдЕрдзрд┐рдХ рд▓рдХреНрд╖рдгреАрдп рд╣реЛрддрд╛.

рдореА рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА .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 рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET Core 3.0 рдордзреНрдпреЗ, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрджреНрдзрддреАрдЪреА рд╡рд╛рдв ~x2 рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдкрд╛рдкрд╕рд╛рдд рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдВрддреБрд▓рд┐рдд рдХрд░рддреЗ.

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рдЯрд┐рдпрд░ рд╕рдВрдХрд▓рди

рдорд╛рдЭреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреЗ рдереЛрдбрдХреНрдпрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ, рдореА рдорд╛рдЭреЗ рд╢рдмреНрдж рджреБрд░реБрд╕реНрдд рдХрд░реВ рдЖрдгрд┐ рдкреВрд░рдХ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╕рдВрдХрд▓рдирд╛рдореБрд│реЗ рддреБрдордЪреНрдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирдЪреНрдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡реЗрд│реЗрд▓рд╛ рдЧрддреА рдорд┐рд│рддреЗ, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рддреНрдпрд╛рдЧ рдХрд░рддрд╛ рдХреА рддреБрдордЪреНрдпрд╛ рдХреЛрдбрдЪреЗ рдХрд╛рд╣реА рднрд╛рдЧ рдкрд╛рд░реНрд╢реНрд╡рднреВрдореАрдд рдЕрдзрд┐рдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓, рдЬреЗ рдПрдХ рд▓рд╣рд╛рди рдУрд╡реНрд╣рд░рд╣реЗрдб рд╕рд╛рджрд░ рдХрд░реВ рд╢рдХрддреЗ. NET Core 3.0 рдЪреНрдпрд╛ рдЖрдЧрдордирд╛рдиреЗ, рдЯрд┐рдпрд░ рдХрдВрдкрд╛рдЗрд▓реЗрд╢рди рд╕рдХреНрд╖рдо рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдВрд╕рд╛рдареА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдпреЗрдгрд╛рд░рд╛ рд╡реЗрд│ рдХрдореА рдЭрд╛рд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рджреЛрд╖ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрд╣реЗрдд. рдкреВрд░реНрд╡реА, рдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдореБрд│реЗ ASP.NET рдХреЛрдЕрд░рдордзреАрд▓ рдкрд╣рд┐рд▓реНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реНрдпрд╛ рдЖрдгрд┐ рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╕рдВрдХрд▓рди рдореЛрдбрдордзреНрдпреЗ рдкреНрд░рдердо рдмрд┐рд▓реНрдб рджрд░рдореНрдпрд╛рди рдЧреЛрдард▓реНрдпрд╛. рд╣реЗ рд╕рдзреНрдпрд╛ .NET Core 3.0 рдордзреНрдпреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреБрдордЪреА рдЗрдЪреНрдЫрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рддреЗ рдЕрдХреНрд╖рдо рдХрд░реВ рд╢рдХрддрд╛. рдЬрд░ рддреБрдореНрд╣реА рдЯреАрдо рд▓реАрдб, рд╡рд░рд┐рд╖реНрда, рдордзреНрдпрдо рдпрд╛ рдкрджрд╛рд╡рд░ рдЕрд╕рд╛рд▓ рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рд╡рд┐рднрд╛рдЧрд╛рдЪреЗ рдкреНрд░рдореБрдЦ рдЕрд╕рд╛рд▓, рддрд░ рддреБрдореНрд╣реА рд╣реЗ рд╕рдордЬреВрди рдШреЗрддрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ рдХреА рдЬрд▓рдж рдкреНрд░рдХрд▓реНрдк рд╡рд┐рдХрд╛рд╕рд╛рдореБрд│реЗ рд╕рдВрдШрд╛рдЪреЗ рдореВрд▓реНрдп рд╡рд╛рдврддреЗ рдЖрдгрд┐ рд╣реЗ рддрдВрддреНрд░рдЬреНрдЮрд╛рди рддреБрдореНрд╣рд╛рд▓рд╛ рджреЛрдиреНрд╣реА рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдЪрд╛ рд╡реЗрд│ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓. рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреА рд╡реЗрд│.

.NET рдкрд╛рддрд│реА рд╡рд░

рддреБрдордЪреА .NET рдлреНрд░реЗрдорд╡рд░реНрдХ / .NET рдХреЛрд░ рдЖрд╡реГрддреНрддреА рдЕрдкрдЧреНрд░реЗрдб рдХрд░рд╛. рдмрд░реНтАНрдпрд╛рдЪрджрд╛, рдкреНрд░рддреНрдпреЗрдХ рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЖрдгрд┐ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЬреЛрдбрддреЗ.

рдкрдг рдирдХреНрдХреА рдлрд╛рдпрджреЗ рдХрд╛рдп? рдЪрд▓рд╛ рддреНрдпрд╛рдкреИрдХреА рдХрд╛рд╣реА рдкрд╛рд╣реВ:

  • .NET Core 3.0 рдиреЗ R2R рдкреНрд░рддрд┐рдорд╛ рд╕рд╛рджрд░ рдХреЗрд▓реНрдпрд╛ рдЬреНрдпрд╛рдореБрд│реЗ .NET рдХреЛрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡реЗрд│ рдХрдореА рд╣реЛрдИрд▓.
  • рдЖрд╡реГрддреНрддреА 2.2 рд╕рд╣, рдЯрд┐рдпрд░ рд╕рдВрдХрд▓рди рджрд┐рд╕реВ рд▓рд╛рдЧрд▓реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЙрдиреНрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдореА рд╡реЗрд│ рдШрд╛рд▓рд╡рддреАрд▓.
  • рдирд╡реАрди .NET рдорд╛рдирдХрд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди.
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрдЪреНрдпрд╛ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА рд╕рдорд░реНрдерди.
  • рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди, рдкреНрд░рддреНрдпреЗрдХ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрд╕рд╣ рдмреЗрд╕ рд▓рд╛рдпрдмреНрд░рд░реА рдХрд▓реЗрдХреНрд╢рди/рд╕реНрдЯреНрд░рдХреНрдЯ/рд╕реНрдЯреНрд░реАрдо/рд╕реНрдЯреНрд░рд┐рдВрдЧ/рд░реЗрдЬреЗрдХреНрд╕ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА рд╕реБрдзрд╛рд░рддреЗ. рддреБрдореНрд╣реА .NET Framework рдордзреВрди .NET Core рд╡рд░ рд╕реНрдерд▓рд╛рдВрддрд░ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдПрдХ рдореЛрдареА рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдвреЗрд▓. рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рдореА .NET Core 3.0 рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдЪреА рд▓рд┐рдВрдХ рдЬреЛрдбрддреЛ: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

.NET рдХреЛрд░ рдордзреНрдпреЗ рдХрд╛рдордЧрд┐рд░реА

рдирд┐рд╖реНрдХрд░реНрд╖

рдХреЛрдб рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдкреИрд▓реВрдВрдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдгреЗ рдЖрдгрд┐ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрдгрд┐ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд╛рдкрд░рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ. рддреБрдореНрд╣реА .NET рдордзреНрдпреЗ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рддреБрдордЪреЗ рдЬреНрдЮрд╛рди рд╢реЗрдЕрд░ рдХреЗрд▓реНрдпрд╛рд╕ рдорд▓рд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓.

рдЧрд┐рдердмрд╢реА рджреБрд╡рд╛

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛