เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™! เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบ‚เป‰เบญเบเป„เบ”เป‰เปƒเบŠเป‰เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹:BenchmarkDotNet=v0.11.5, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™=Windows 10.0.18362
CPU Intel Core i5-8250U 1.60GHz (Kaby Lake R), 1 CPU, 8 เบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™ เปเบฅเบฐ 4 เปเบเบ™เบŸเบตเบŠเบดเบ
.NET Core SDK=3.0.100
[เป€เบˆเบปเป‰เบฒเบžเบฒเบš]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
เบซเบผเบฑเบ: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[เป€เบˆเบปเป‰เบฒเบžเบฒเบš]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
เบซเบผเบฑเบ: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Core Runtime=เบซเบผเบฑเบ

ToList เบ—เบฝเบšเบเบฑเบš ToArray เปเบฅเบฐ Cycles


เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบงเบฒเบ‡โ€‹เปเบœเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบเบฐโ€‹เบเบฝเบกโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ™เบตเป‰โ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบโ€‹เบ‚เบญเบ‡ .NET Core 3.0, เปเบ•เปˆโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบเบฑเบšโ€‹เบกเบฑเบ™, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบฅเบฑเบโ€‹เบฅเบฑเบ”โ€‹เบชเบฐโ€‹เบซเบกเบตโ€‹เบžเบฒเบšโ€‹เบ‚เบญเบ‡โ€‹เบ„เบปเบ™โ€‹เบญเบทเปˆเบ™โ€‹เปเบฅเบฐโ€‹เบชเปเบฒโ€‹เป€เบ™เบปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ„เบปเบ™โ€‹เบญเบทเปˆเบ™, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบˆเบฐโ€‹เบŠเบตเป‰โ€‹เบญเบญเบ. เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”.

เปƒเบ™เบ™เบฒเบกเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบญเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบ—เปˆเบฒเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบก loops reverse เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบš lovers เบ‚เบญเบ‡ "เปเบšเบš C ++" เบ‚เบญเบ‡ loops เบเบฒเบ™เบ‚เบฝเบ™.

เบฅเบฐเบซเบฑเบ”:

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 Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบŠเปเป‰เบฒเบ„เบทเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒ Array เปเบกเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบžเบฒเบเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™. เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบฅเบฒเบเบŠเบทเปˆเบกเบตเบ‚เปเป‰เบ”เบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ•เบฒเบกเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ‚เบฝเบ™เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš loops, เบขเปˆเบฒเบฅเบทเบกเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ loop เบ—เปเบฒเบกเบฐเบ”เบฒเปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ loops. เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เปœเบถเปˆเบ‡โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบžเบดเบกโ€‹เป€เบœเบตเบโ€‹เปเบœเปˆโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ”เบปเบ™โ€‹เบ™เบฒเบ™โ€‹เปเบฅเป‰เบง: 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 Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบžเบฐเบเบฒเบเบฒเบกเบˆเบฑเบšเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฅเบฐเป€เบžเบตเปˆเบกเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เปƒเบชเปˆเบชเบฒเบเบฅเบฐเบซเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” - เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบ—เบตเปˆเป‚เบซเบฅเบ”เบฅเบฐเบšเบปเบš, เปเบ•เปˆเป€เบ›เบฑเบ™เบเบฒเบ™เบ–เบดเป‰เบกเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปƒเบซเบกเปˆ.

เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบกเปˆเบ™เบŠเป‰เบฒเบเบงเปˆเบฒเบšเบฒเบ‡เบŠเบฑเป‰เบ™เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ›เบฐเบกเบงเบ™เบœเบปเบ™เปเบšเบšเบŸเบญเบกเบซเบผเบทเบšเบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบฎเบนเป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™?

เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบ„เบงเบ™โ€‹เบ‚เบฝเบ™โ€‹เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™ () เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เปƒเบซเบกเปˆโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ‚เปเป‰โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹. เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบ–เบดเป‰เบกเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบกเปˆเบ™เบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบ !!!

เบ•เปˆเปเบฒเบเบงเปˆเบฒ, เบ•เปˆเปเบฒเบเบงเปˆเบฒเบ•เบปเบงเบ›เปˆเบฝเบ™, เป‚เบ•เป€เบ—เบดเบ‡, เป‚เบ•เป€เบ—เบดเบ‡เบ•เบปเบงเบ›เปˆเบฝเบ™

เบ›เบฐเบชเบปเบšเบเบฒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒ 5 เบ›เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป€เบงเบ—เบต .NET, เบ‚เป‰เบญเบเป„เบ”เป‰เบžเบปเบšเบซเบผเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบฐเบ•เบฃเบดเบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป„เบ”เป‰เป€เบซเบฑเบ™เบฎเบนเบšเบžเบฒเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เบกเบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบงเบดเบชเบฒเบซเบฐเบเบดเบ”เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบกเบตเบซเบผเบฒเบเป‚เบ„เบ‡เบเบฒเบ™, เปเบ•เปˆเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบชเบฒเบเบžเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เบงเบ™เปƒเบŠเป‰เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบกเบฑเบ™? เปƒเบ™เบ›เบถเป‰เบก CLR เบœเปˆเบฒเบ™ C# เป‚เบ”เบ Richter, เบ‚เป‰เบญเบเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบงเบดเบ—เบตเบเบฒเบ™ ToUpperInvariant() เป„เบงเบเบงเปˆเบฒ ToLowerInvariant().

เบซเบเปเป‰เบกเบฒเบˆเบฒเบเบ›เบถเป‰เบก:

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เปเบ™เปˆเบ™เบญเบ™, เบ‚เป‰เบญเบเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบฑเบ™เปเบฅเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™ .NET Framework เปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบ•เบปเบเปƒเบˆ - เบซเบผเบฒเบเบเบงเปˆเบฒ 15% เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบกเบฒเบฎเบญเบ”เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ•เบญเบ™เป€เบŠเบปเป‰เบฒเบกเบทเป‰เบ•เปเปˆเบกเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบฑเบšเบœเบนเป‰เบšเบฑเบ™เบŠเบฒเบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, 2 เปƒเบ™ 14 เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบžเบทเปˆเบญเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเปƒเบซเบกเปˆ, เปเบฅเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Excel เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป„เบ”เป‰เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบ—เปˆเบฒเบ™เบงเบฑเบ”เปเบ—เบเบชเปเบฒเบฅเบฑเบšเบฎเบธเปˆเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ .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 Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เปƒเบ™ .NET Core 3.0, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ ~x2 เปเบฅเบฐเบเบฒเบ™เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบญเบ‡.

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบ”เบฑเบš

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ‚เป‰เบญเบเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ™เบตเป‰เบชเบฑเป‰เบ™เป†, เบ‚เป‰เบญเบเบขเบฒเบเปเบเป‰เป„เบ‚เปเบฅเบฐเป€เบชเบตเบกเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบฅเบฐเบ”เบฑเบšเป€เบฅเบฑเปˆเบ‡เป€เบงเบฅเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบ•เปˆเบ—เปˆเบฒเบ™เป€เบชเบเบชเบฐเบฅเบฐเบงเปˆเบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ›เบฑเบ™เบชเบฐเบšเบฑเบšเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบงเปˆเบฒเปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เปเบ™เบฐเบ™เปเบฒเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบ”เป‰เบงเบเบเบฒเบ™เบกเบฒเป€เบ–เบดเบ‡เบ‚เบญเบ‡ NET Core 3.0, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบŠเบฑเป‰เบ™เป„เบ”เป‰เบซเบผเบธเบ”เบฅเบปเบ‡เปเบฅเบฐเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบง. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบ—เบเป‚เบ™เป‚เบฅเบเบตเบ™เบตเป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เปเบฒเบญเบดเบ”เปƒเบ™ ASP.NET Core เปเบฅเบฐ freezes เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบซเบผเบฒเบเบฅเบฐเบ”เบฑเบš. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ .NET Core 3.0, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบกเบฑเบ™เป„เบ”เป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบซเบปเบงเบซเบ™เป‰เบฒเบ—เบตเบก, เบญเบฒเบงเบธเป‚เบช, เบเบฒเบ‡, เบซเบผเบทเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบซเบปเบงเบซเบ™เป‰เบฒเบžเบฐเปเบ™เบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ„เบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเป€เบžเบตเปˆเบกเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™เปเบฅเบฐเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ›เบฐเบซเบเบฑเบ”เป€เบงเบฅเบฒเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบฑเบ‡เบชเบญเบ‡. เปเบฅเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.

เบฅเบฐเบ”เบฑเบš .NET เบ‚เบถเป‰เบ™

เบญเบฑเบšเป€เบเบฃเบ”เป€เบงเบตเบŠเบฑเบ™ .NET Framework / .NET Core เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เป€เบฅเบทเป‰เบญเบเป†, เปเบ•เปˆเบฅเบฐเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเปƒเบซเป‰เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเป€เบžเบตเปˆเบกเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆ.

เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เปเบกเปˆเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”? เปƒเบซเป‰โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบชเปˆเบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹:

  • .NET Core 3.0 เปเบ™เบฐเบ™เปเบฒเบฎเบนเบšเบžเบฒเบš R2R เบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เป€เบงเบฅเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ .NET Core.
  • เบ”เป‰เบงเบเบชเบฐเบšเบฑเบš 2.2, Tier Compilation เบ›เบฒเบเบปเบ”, เบ‚เบญเบšเปƒเบˆเบ—เบตเปˆเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เป‰เบญเบเปƒเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ„เบ‡เบเบฒเบ™.
  • เบฎเบญเบ‡เบฎเบฑเบšเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ .NET เปƒเปเปˆ.
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก.
  • เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เบ”เป‰เบงเบเปเบ•เปˆเบฅเบฐเบฎเบธเปˆเบ™เปƒเบซเบกเปˆ, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก / เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ / เบ™เป‰เปเบฒ / String / Regex เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบซเบผเบฒเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบˆเบฒเบ .NET Framework เป„เบ›เบซเบฒ .NET Core, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเปเบ™เบšเบฅเบดเป‰เบ‡เป„เบ›เบซเบฒเบšเบฒเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ .NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET Core

เบชเบฐเบซเบฅเบธเบš

เป€เบกเบทเปˆเบญเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเปเบฅเบฐเป€เบงเบ—เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”. เบ‚เป‰เบญเบเบˆเบฐเบ”เบตเปƒเบˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™ .NET.

เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš github

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster