.NET рдХреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

.NET рдХреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

.NET рдХреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

рдирдорд╕реНрддреЗ! рдпрд╣ рд▓реЗрдЦ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдФрд░ рдореЗрд░реЗ рд╕рд╣рдХрд░реНрдореА рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЙрд╕ рдорд╢реАрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬрд┐рд╕ рдкрд░ рдЧрдгрдирд╛рдПрдБ рдХреА рдЧрдИрдВ:рдмреЗрдВрдЪрдорд╛рд░реНрдХрдбреЙрдЯрдиреЗрдЯ=v0.11.5, рдУрдПрд╕=рд╡рд┐рдВрдбреЛрдЬ 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (рдХреИрдмреА рд▓реЗрдХ R), 1 CPU, 8 рд▓реЙрдЬрд┐рдХрд▓ рдФрд░ 4 рдлрд┐рдЬрд┐рдХрд▓ рдХреЛрд░
.NET рдХреЛрд░ SDK=3.0.100
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64 рдмрд┐рдЯ RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64 рдмрд┐рдЯ RyuJIT
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64 рдмрд┐рдЯ RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64 рдмрд┐рдЯ RyuJIT

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

ToList рдмрдирд╛рдо ToArray рдФрд░ рд╕рд╛рдЗрдХрд┐рд▓


рдореИрдВрдиреЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ .NET Core 3.0 рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╣рд░рд╛ рджрд┐рдпрд╛, рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдХреА рдорд╣рд┐рдорд╛ рдЪреБрд░рд╛рдирд╛ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдПрдХ рдЕрдЪреНрдЫреЗ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рддреБрд▓рдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.

рдЕрдкрдиреА рдУрд░ рд╕реЗ, рдореИрдВ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдорд╛рдк рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рд▓реЗрдЦрди рд▓реВрдк рдХреА "рд╕реА++ рд╢реИрд▓реА" рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд░рд┐рд╡рд░реНрд╕ рд▓реВрдк рдЬреЛрдбрд╝реЗ рд╣реИрдВред

рдХреЛрдб:

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 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ 5 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдРрд╕реЗ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд┐рд▓реЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рд▓рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рднреА рджреЗрдЦрд╛: рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреАред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рд░рд┐рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ C# рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CLR рдкреБрд╕реНрддрдХ рдореЗрдВ, рдореИрдВрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝реА рдХрд┐ ToUpperInvariant() рд╡рд┐рдзрд┐ ToLowerInvariant() рд╕реЗ рддреЗрдЬрд╝ рд╣реИред

рдкреБрд╕реНрддрдХ рд╕реЗ рдЕрдВрд╢:

.NET рдХреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

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

рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП .NET рдХреЛрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдк рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХреЗред рдФрд░ рдореИрдВ рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рд╕ рдХрдВрдкрдиреА рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 рдХреЛрд░ 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 рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ .NET рдХреЛрд░ рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, рдореИрдВ .NET Core 3.0 рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд▓рд┐рдВрдХ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдБ: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

.NET рдХреЛрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди

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

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

рдЬреАрдердм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ