.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดนเดพเดฏเต! เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเดพเดจเตเด‚ เดŽเดจเตเดฑเต† เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เดฐเตเด‚ เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดฎเดฟเด•เดšเตเดš เดธเดฎเตเดชเตเดฐเดฆเดพเดฏเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดถเต‡เด–เดฐเดฎเดพเดฃเต เดˆ เดฒเต‡เด–เดจเด‚.

เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดจเดŸเดคเตเดคเดฟเดฏ เดฏเดจเตเดคเตเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
เด‡เดจเตเดฑเตฝ เด•เต‹เตผ 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 Core 3.0-เตฝ เดŽเดจเดฟเด•เตเด•เต เดจเต‡เดŸเดพเตป เด•เดดเดฟเดžเตเดžเดคเต เด‡เดคเดพ:

.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

เด’เดฐเต เด…เดฑเต‡ เดถเต‡เด–เดฐเดคเตเดคเดฟเดจเตเดฑเต† เด†เดตเตผเดคเตเดคเดจ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เด…เดคเดฟเดจเตเดฑเต† เด†เดจเตเดคเดฐเดฟเด• เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเด•เดณเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด•เดณเด•เตเดทเตป เดธเตˆเดธเต เด…เดฒเต‹เด•เตเด•เต‡เดทเดจเตเด‚ เด•เดพเดฐเดฃเด‚ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเดฃเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเดฟเด—เดฎเดจเด‚ เดšเต†เดฏเตเดฏเดพเด‚. เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดถเต‡เด–เดฐเดคเตเดคเดฟเดจเต เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เด—เตเดฃเด™เตเด™เดณเตเดฃเตเดŸเต†เดจเตเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพ เดถเดฐเดฟเดฏเดพเดฏ เดถเต‡เด–เดฐเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเตเด‚ เด“เตผเดฎเตเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต. เดฒเต‚เดชเตเดชเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เดฒเต‹เดœเดฟเด•เต เดŽเดดเตเดคเดฟเดฏเดพเดฒเตเด‚, เด‡เดคเตŠเดฐเต เดธเดพเดงเดพเดฐเดฃ เดฒเต‚เดชเตเดชเดพเดฃเต†เดจเตเดจเตเด‚ เด‡เดคเต เดธเดพเดงเตเดฏเดฎเดพเดฏ เดฒเต‚เดชเตเดชเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเต เดตเดฟเดงเต‡เดฏเดฎเดพเดฃเต†เดจเตเดจเตเด‚ เดฎเดฑเด•เตเด•เดฐเตเดคเต. เดตเดณเดฐเต†เด•เตเด•เดพเดฒเด‚ เดฎเตเดฎเตเดชเต เดนเดฌเดฑเดฟเตฝ เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเต: 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 เดตเตผเดทเดคเตเดคเต† เด…เดจเตเดญเดตเดชเดฐเดฟเดšเดฏเดคเตเดคเดฟเตฝ, เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดฎเดพเดšเตเดšเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เดžเดพเตป เด•เดฃเตเดŸเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดžเดพเตป เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดšเดฟเดคเตเดฐเดตเตเด‚ เด•เดฃเตเดŸเต: เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดŽเดจเตเดฑเตผเดชเตเดฐเตˆเดธเต เดธเตŠเดฒเตเดฏเต‚เดทเตป เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด…เดตเดฏเดฟเตฝ เด“เดฐเต‹เดจเตเดจเดฟเดจเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดคเดพเดฐเดคเดฎเตเดฏเด™เตเด™เตพ เดจเดŸเดคเตเดคเดฟ. เดŽเดจเตเดจเดพเตฝ เดŽเดจเตเดคเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต, เด…เดคเต เดŽเด™เตเด™เดจเต† เดเด•เต€เด•เดฐเดฟเด•เตเด•เดพเด‚? เดฑเดฟเด•เตเดŸเตผ เดŽเดดเตเดคเดฟเดฏ CLR เดตเดดเดฟ C# เดŽเดจเตเดจ เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝ, 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 เด•เต‹เตผ 3.0 เดจเตเดฑเต† เดตเดฐเดตเต‹เดŸเต†, เดŸเดฏเตผ เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณ เดฌเดฟเตฝเดกเต เดธเดฎเดฏเด‚ เด•เตเดฑเดฏเตเด•เดฏเตเด‚ เดˆ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดฌเด—เตเด•เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดฎเตเดฎเตเดชเต, เดˆ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ ASP.NET เด•เต‹เดฑเดฟเดฒเต† เด†เดฆเตเดฏ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเตฝ เดชเดฟเดถเด•เตเด•เตพเด•เตเด•เต เด•เดพเดฐเดฃเดฎเดพเดตเตเด•เดฏเตเด‚ เดฎเตพเดŸเตเดŸเดฟ-เดฒเต†เดตเตฝ เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดฎเต‹เดกเดฟเดฒเต† เด†เดฆเตเดฏ เดฌเดฟเตฝเดกเต เดธเดฎเดฏเดคเตเดคเต เดซเตเดฐเต€เดธเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เด‡เดคเต เดจเดฟเดฒเดตเดฟเตฝ .NET เด•เต‹เตผ 3.0-เตฝ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เดพเด‚. เดจเดฟเด™เตเด™เตพ เดŸเต€เด‚-เดฒเต€เดกเต, เดธเต€เดจเดฟเดฏเตผ, เดฎเดฟเดกเดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดตเด•เตเดชเตเดชเดฟเดจเตเดฑเต† เดคเดฒเดตเดจเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดฆเตเดฐเตเดคเด—เดคเดฟเดฏเดฟเดฒเตเดณเตเดณ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเดฟเด•เดธเดจเด‚ เดŸเต€เดฎเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เดˆ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดฐเดฃเตเดŸเต เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผเด•เตเด•เตเด‚ เดธเดฎเดฏเด‚ เดฒเดพเดญเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดฃเด‚. เดชเดฆเตเดงเดคเดฟเดฏเตเดŸเต† เดธเดฎเดฏเดตเตเด‚.

.NET เดฒเต†เดตเตฝ เด…เดชเตเดชเต

เดจเดฟเด™เตเด™เดณเตเดŸเต† .NET เดซเตเดฐเต†เดฏเดฟเด‚เดตเตผเด•เตเด•เต / .NET เด•เต‹เตผ เดชเดคเดฟเดชเตเดชเต เดจเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•. เดชเดฒเดชเตเดชเต‹เดดเตเด‚, เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเตเด‚ เด…เดงเดฟเด• เดชเตเดฐเด•เดŸเดจ เดจเต‡เดŸเตเดŸเด™เตเด™เตพ เดจเตฝเด•เตเด•เดฏเตเด‚ เดชเตเดคเดฟเดฏ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดŽเดจเตเดจเดพเตฝ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเดจเตเดคเดพเดฃเต เดชเตเดฐเดฏเต‹เดœเดจเด™เตเด™เตพ? เด…เดตเดฏเดฟเตฝ เดšเดฟเดฒเดคเต เดจเต‹เด•เตเด•เดพเด‚:

  • .NET เด•เต‹เตผ 3.0 R2R เด‡เดฎเต‡เดœเตเด•เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเต, เด…เดคเต .NET เด•เต‹เตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเดŸเต† เด†เดฐเด‚เดญ เดธเดฎเดฏเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเด‚.
  • เดชเดคเดฟเดชเตเดชเต 2.2 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดŸเดฏเตผ เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต, เด‡เดคเดฟเดจเต เดจเดจเตเดฆเดฟ, เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเดฎเดพเตผ เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเด‚ เดšเต†เดฒเดตเดดเดฟเด•เตเด•เตเด‚.
  • เดชเตเดคเดฟเดฏ .NET เดฎเดพเดจเดฆเดฃเตเดกเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.
  • เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเตเดŸเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.
  • เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป, เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดฒเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเดŸเต† เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป / เดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเต / เดธเตเดŸเตเดฐเต€เด‚ / เดธเตเดŸเตเดฐเดฟเด‚เด—เต / เดฑเต€เดœเด•เตเดธเต เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เด…เดคเดฟเดฒเต‡เดฑเต†เดฏเตเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ .NET เดซเตเดฐเต†เดฏเดฟเด‚เดตเตผเด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเต .NET Core-เดฒเต‡เด•เตเด•เต เดฎเตˆเด—เตเดฐเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฌเต‹เด•เตเดธเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดตเดฒเดฟเดฏ เดชเตเดฐเด•เดŸเดจ เดฌเต‚เดธเตเดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเด‚. เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ, .NET Core 3.0-เดฒเต‡เด•เตเด•เต เดšเต‡เตผเดคเตเดคเดฟเดŸเตเดŸเตเดณเตเดณ เดšเดฟเดฒ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดžเดพเตป เด’เดฐเต เดฒเดฟเด™เตเด•เต เด…เดฑเตเดฑเดพเดšเตเดšเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

.NET เด•เต‹เดฑเดฟเดฒเต† เดชเตเดฐเด•เดŸเดจเด‚

เดคเต€เดฐเตเดฎเดพเดจเด‚

เด•เต‹เดกเต เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดตเดถเด™เตเด™เดณเดฟเตฝ เดถเตเดฐเดฆเตเดง เดšเต†เดฒเตเดคเตเดคเตเด•เดฏเตเด‚ เดฎเดฟเด•เดšเตเดš เดซเดฒเด‚ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเตเดŸเต†เดฏเตเด‚ เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฎเต‚เดฒเตเดฏเดตเดคเตเดคเดพเดฃเต. เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดฑเดฟเดตเต .NET-เตฝ เดชเด™เตเด•เตเดตเต†เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดžเดพเตป เดธเดจเตเดคเต‹เดทเดฟเด•เตเด•เตเดจเตเดจเต.

github-เดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•