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

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

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

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

рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдореЗрд╕рд┐рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА:рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрдбрдЯрдиреЗрдЯ=v0.11.5, рдУрдПрд╕=рд╡рд┐рдиреНрдбреЛрдЬ резреж.реж.резреорейремреи
рдЗрдиреНрдЯреЗрд▓ рдХреЛрд░ i5-8250U CPU рез.ремрежGHz (Kaby Lake R), рез CPU, рео рд▓рдЬрд┐рдХрд▓ рд░ рек рднреМрддрд┐рдХ рдХреЛрд░
.NET рдХреЛрд░ SDK=рей.реж.резрежреж
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬрд┐рдЯ
рдХреЛрд░: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬреЗрдЖрдИрдЯреА
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬрд┐рдЯ
рдХреЛрд░: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬреЗрдЖрдИрдЯреА

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

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 рдХреЛрд░ рдорд╛ рдкреНрд░рджрд░реНрд╢рди

Try catch рд▓реЗ рдХреЛрдб рдмреБрдЭреНрди рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ рд░ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдордХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдмрдврд╛рдЙрдБрдЫред рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдирд┐рд░реНрдорд╛рдг рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдирдЧрд░рд┐рдПрдХрд╛ рдХреЛрдбрдХрд╛ рд▓рд╛рдЗрдирд╣рд░реВ рдШреБрд╕рд╛рдЙрдиреБрд╣реЛрд╕реН - рдпрд╕рд▓реЗ рдХреЛрдб рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдиреЗрдЫред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рдзреЗрд░реИ рдЕрдкрд╡рд╛рдж рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩ рд╣реЛрдЗрди рдЬрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рд▓реЛрдб рдЧрд░реНрдЫ, рддрд░ throw new Exception рдирд┐рд░реНрдорд╛рдг рдорд╛рд░реНрдлрдд рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЖрдлреИрдВ рдлреНрдпрд╛рдБрдХреНрдЫред

рдЕрдкрд╡рд╛рджрд╣рд░реВ рдлреНрдпрд╛рдБрдХреНрдиреБ рдХреЗрд╣реА рд╡рд░реНрдЧрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рд╕рд╣реА рдврд╛рдБрдЪрд╛рдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рдХреБрдиреИ рдлрд╛рд░рдо рд╡рд╛ рдХреЗрд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд╣реБрдиреБрдкрд░реНрдЫ рднрдиреЗ, рдХрд┐рди рдпрд╕рд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдирдЧрд░реНрдиреЗ?

рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдЕрд╕рд╛рдзрд╛рд░рдг рдирднрдПрд╕рдореНрдо рддрдкрд╛рдИрдВрд▓реЗ throw new Exception() construct рд▓реЗрдЦреНрдиреБ рд╣реБрдБрджреИрдиред рдЕрдкрд╡рд╛рджрд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБ рд░ рдлреНрдпрд╛рдБрдХреНрдиреБ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫ!!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

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

рдкреБрд╕реНрддрдХрдмрд╛рдЯ рдЕрдВрд╢:

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

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

рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ .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 Core рдорд╛ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдПрдХреЛ рдерд┐рдпреЛ рд░ рдЯрд╛рдпрд░реНрдб рд╕рдВрдХрд▓рди рдореЛрдбрдорд╛ рдкрд╣рд┐рд▓реЛ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╕рдордпрдорд╛ рдлреНрд░рд┐рдЬрд┐рдЩ рднрдПрдХреЛ рдерд┐рдпреЛред рд╣рд╛рд▓, .NET Core 3.0 рдорд╛, рдпреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо рдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдпрд╕рд▓рд╛рдИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рдЯреЛрд▓реА рдкреНрд░рдореБрдЦ, рд╡рд░рд┐рд╖реНрда, рдордзреНрдп, рд╡рд╛ рддрдкрд╛рдИрдВ рд╡рд┐рднрд╛рдЧ рдкреНрд░рдмрдиреНрдзрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдмреБрдЭреНрдиреБрдкрд░реНрдЫ рдХрд┐ рджреНрд░реБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕рд▓реЗ рдЯреЛрд▓реАрдХреЛ рдореВрд▓реНрдп рдмрдврд╛рдЙрдБрдЫ рд░ рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕рдордп рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд╕рдордп рджреБрд╡реИ рдмрдЪрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред

.NET рд╕реНрддрд░ рдорд╛рдерд┐

рддрдкрд╛рдИрдВрдХреЛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ / .NET рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдЧреНрд░реЗрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкреНрд░рд╛рдпрдГ, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд▓рд╛рдн рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рд░ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдердкреНрдЫред

рддрд░ рдпрд╕рдХрд╛ рдЦрд╛рд╕ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдХреЗ рдХреЗ рд╣реБрдиреН? рдЖрдЙрдиреБрд╣реЛрд╕реН, рддреАрдордзреНрдпреЗ рдХреЗрд╣реА рд╣реЗрд░реМрдВ:

  • .NET Core 3.0 рд▓реЗ R2R рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ .NET Core рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдШрдЯрд╛рдЙрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред
  • рд╕рдВрд╕реНрдХрд░рдг реи.реи рджреЗрдЦрд┐, рдЯрд┐рдпрд░ рдХрдореНрдкрд╛рдЗрд▓реЗрд╕рди рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫ, рдЬрд╕рдХреЛ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрди рдХрдо рд╕рдордп рдЦрд░реНрдЪ рдЧрд░реНрдиреЗрдЫрдиреНред
  • рдирдпрд╛рдБ .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 рдХреЛрд░ рдорд╛ рдкреНрд░рджрд░реНрд╢рди

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

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

рдЧрд┐рдердмрдХреЛ рд▓рд┐рдЩреНрдХ

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

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