.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 рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 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/ред рдпреЛ рдЕрдЭреИ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫ рд░ рдкрдвреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫред

Thrower

рдПрдХ рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ, рдореИрд▓реЗ рд╡рд┐рд░рд╛рд╕рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛтАЛтАЛрдПрдХ рдХрдореНрдкрдиреАрдорд╛ рдХрд╛рдо рдЧрд░реЗрдВ, рддреНрдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкреНрд░рдпрд╛рд╕-рдХреНрдпрд╛рдЪ-рдереНрд░реЛ рдирд┐рд░реНрдорд╛рдг рдорд╛рд░реНрдлрдд рдХреНрд╖реЗрддреНрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рд╛рдорд╛рдиреНрдп рдерд┐рдпреЛред рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдмреБрдЭреЗрдВ рдХрд┐ рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╕реНрд╡рд╕реНрде рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдерд┐рдпреЛ, рддреНрдпрд╕реИрд▓реЗ рдЬрдм рд╕рдореНрднрд╡ рднрдП рдореИрд▓реЗ рдпрд╕реНрддреЛ рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВред рддрд░ рдпрд╕реНрддреЛ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╕рд╛рде рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рди рдЦрд░рд╛рдм рдЫ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реНред рдореИрд▓реЗ рджреБрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ рддреБрд▓рдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдХреЛрдб рд▓реЗрдЦреЗрдВ рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд▓рд╛рдЧрд┐ рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрд╣рд░реВ рдмрдирд╛рдПред

рдХреЛрдб:

        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 рдорд╛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЖрдлреНрдиреЛ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред

Github рдорд╛ рд▓рд┐рдЩреНрдХ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди