.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 vs 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 เช•เซ‹เชฐ 2.2 เช…เชจเซ‡ 3.0 เชฎเชพเช‚ เชชเชฐเซเชซเซ‹เชฐเซเชฎเชจเซเชธ เชธเซเชชเซ€เชก เชฒเช—เชญเช— เชธเชฎเชพเชจ เช›เซ‡. .NET เช•เซ‹เชฐ 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 เช•เซ‹เชฐ 3.0 เช…เชจเซ‡ เช•เซ‹เชฐ 2.2 เชฎเชพเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเชฎเชพเชจ เชชเชฐเชฟเชฃเชพเชฎ เชงเชฐเชพเชตเซ‡ เช›เซ‡ (.NET เช•เซ‹เชฐ 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 เช•เซ‹เชฐ 3.0 เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชพเชฏเซ‡เชฒเชพ เช•เซ‡เชŸเชฒเชพเช• เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจเชจเซ€ เชฒเชฟเช‚เช• เชœเซ‹เชกเซเช‚ เช›เซเช‚: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

.NET เช•เซ‹เชฐ เชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชจ

เชจเชฟเชทเซเช•เชฐเซเชท

เช•เซ‹เชก เชฒเช–เชคเซ€ เชตเช–เชคเซ‡, เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชตเชฟเชตเชฟเชง เชชเชพเชธเชพเช“ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเชตเซเช‚ เช…เชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชชเชฐเชฟเชฃเชพเชฎ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพ เช…เชจเซ‡ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎเชจเซ€ เชธเซเชตเชฟเชงเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชคเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ .NET เชฎเชพเช‚ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชธเช‚เชฌเช‚เชงเชฟเชค เชคเชฎเชพเชฐเซเช‚ เชœเซเชžเชพเชจ เชถเซ‡เชฐ เช•เชฐเชถเซ‹ เชคเซ‹ เชฎเชจเซ‡ เช†เชจเช‚เชฆ เชฅเชถเซ‡.

เช—เซ€เชฅเชฌ เชธเชพเชฅเซ‡ เชฒเชฟเช‚เช• เช•เชฐเซ‹

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹