Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Nyob zoo sawv daws! Kab lus no yog ib phau ntawm Cov Kev Cai Zoo Tshaj Plaws uas kuv cov npoj yaig thiab kuv tau siv sijhawm ntev los ua haujlwm ntawm ntau qhov haujlwm.

Cov ntaub ntawv hais txog lub tshuab uas cov kev suav tau ua:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 lub ntsiab lus thiab 4 lub cev cores
.NET Core SDK = 3.0.100
[Tus Tswv]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Core: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Tus Tswv]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Core: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Core Runtime=Core

ToList vs ToArray thiab Cycles


Kuv tau npaj los npaj cov ntaub ntawv no nrog kev tso tawm ntawm .NET Core 3.0, tab sis lawv tuav kuv rau nws, Kuv tsis xav nyiag lwm tus lub yeeb koob thiab luam lwm tus neeg cov ntaub ntawv, yog li kuv tsuas yog taw qhia. txuas mus rau ib tsab xov xwm zoo uas qhov kev sib piv tau piav qhia meej.

Ntawm kuv tus kheej, kuv tsuas yog xav qhia rau koj kuv qhov kev ntsuas thiab cov txiaj ntsig; Kuv ntxiv rov qab loops rau lawv rau cov neeg nyiam ntawm "C ++ style" ntawm kev sau ntawv.

Code:

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;
        }
    }

Kev ua tau zoo nrawm hauv .NET Core 2.2 thiab 3.0 yuav luag zoo ib yam. Nov yog qhov kuv tuaj yeem tau txais hauv .NET Core 3.0:

Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Peb tuaj yeem txiav txim siab tias kev rov ua dua ntawm kev sau Array yog nrawm dua vim nws qhov kev ua kom zoo dua qub thiab nthuav qhia qhov kev faib loj. Nws tseem tsim nyog nco ntsoov tias Daim Ntawv Teev Npe muaj nws qhov zoo thiab koj yuav tsum siv qhov kev sau zoo nyob ntawm qhov xav tau. Txawm hais tias koj sau logic rau kev ua haujlwm nrog loops, tsis txhob hnov ​​​​qab tias qhov no yog ib lub voj zoo tib yam thiab nws kuj raug rau qhov ua kom zoo dua qub. Ib tsab xov xwm tau luam tawm ntawm habr ntev dhau los: https://habr.com/ru/post/124910/. Nws tseem cuam tshuam thiab pom zoo nyeem ntawv.

Pov

Ib xyoos dhau los, kuv tau ua haujlwm ntawm ib lub tuam txhab ntawm ib txoj haujlwm qub txeeg qub teg, hauv qhov project nws yog ib txwm ua kom muaj kev lees paub los ntawm kev sim-catch-throw construct. Kuv twb nkag siab tias qhov no yog qhov tsis zoo ntawm kev lag luam logic rau qhov project, yog li thaum twg ua tau kuv sim tsis siv cov qauv tsim. Tab sis cia peb xav seb vim li cas txoj hauv kev los daws cov teeb meem nrog xws li kev tsim kho tsis zoo. Kuv tau sau ib tus lej me me los sib piv ob txoj hauv kev thiab ua cov qauv ntsuas rau txhua qhov kev xaiv.

Code:

        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;
        }

Cov txiaj ntsig hauv .NET Core 3.0 thiab Core 2.2 muaj qhov txiaj ntsig zoo sib xws (.NET Core 3.0):

Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Sim ntes ua rau tus lej nyuaj rau kev nkag siab thiab ua rau lub sijhawm ua tiav ntawm koj qhov program. Tab sis yog tias koj xav tau qhov kev tsim kho no, koj yuav tsum tsis txhob ntxig cov kab ntawm cov cai uas tsis xav tias yuav daws qhov yuam kev - qhov no yuav ua rau cov cai yooj yim nkag siab. Qhov tseeb, nws tsis yog ntau npaum li kev tuav ntawm kev zam uas thauj cov kab ke, tab sis qhov cuam tshuam ntawm kev ua yuam kev lawv tus kheej los ntawm kev cuam tshuam tshiab Exception tsim.

Kev cuam tshuam cuam tshuam qeeb dua li qee chav kawm uas yuav sau qhov yuam kev hauv hom ntawv xav tau. Yog tias koj tab tom ua ib daim ntawv lossis qee cov ntaub ntawv thiab koj paub meej tias qhov yuam kev yuav tsum yog dab tsi, vim li cas ho tsis ua nws?

Koj yuav tsum tsis txhob sau ib qho tshiab Exception() tsim yog tias qhov xwm txheej no tsis yog qhov tshwj xeeb. Tuav thiab pov ib qho kev zam yog kim heev !!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

Tshaj li kuv 5 xyoos ntawm kev ua haujlwm ntawm .NET platform, kuv tau hla ntau qhov haujlwm uas siv txoj hlua sib txuam. Kuv kuj pom cov duab hauv qab no: muaj ib qho kev daws teeb meem Enterprise nrog ntau txoj haujlwm, txhua tus ua haujlwm sib piv cov hlua sib txawv. Tab sis dab tsi yuav tsum tau siv thiab yuav ua li cas koom ua ke? Hauv phau ntawv CLR ntawm C# los ntawm Richter, Kuv nyeem cov ntaub ntawv uas ToUpperInvariant() txoj kev nrawm dua ToLowerInvariant().

Tshaj tawm ntawm phau ntawv:

Kev ua tau zoo hauv .NET Core

Tau kawg, kuv tsis ntseeg nws thiab txiav txim siab khiav qee qhov kev sim tom qab ntawd ntawm .NET Framework thiab qhov tshwm sim ua rau kuv xav tsis thoob - ntau dua 15% kev ua haujlwm nce. Tom qab ntawd, thaum tuaj txog ntawm kev ua haujlwm tag kis sawv ntxov, kuv tau qhia cov kev ntsuas no rau kuv cov thawj coj thiab muab lawv nkag mus rau qhov chaws. Tom qab no, 2 tawm ntawm 14 qhov haujlwm tau hloov pauv kom haum rau qhov ntsuas tshiab, thiab txiav txim siab tias ob txoj haujlwm no muaj los ua cov rooj Excel loj, qhov tshwm sim yog ntau dua qhov tseem ceeb rau cov khoom.

Kuv kuj nthuav qhia rau koj cov kev ntsuas rau ntau qhov sib txawv ntawm .NET Core, kom koj txhua tus tuaj yeem xaiv qhov kev daws teeb meem zoo tshaj plaws. Thiab kuv tsuas yog xav ntxiv tias hauv lub tuam txhab uas kuv ua haujlwm, peb siv ToUpper() los sib piv cov hlua.

Code:

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();
        }

Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Hauv .NET Core 3.0, qhov nce rau txhua txoj hauv kev no yog ~ x2 thiab sib npaug cov kev siv ntawm lawv tus kheej.

Kev ua tau zoo hauv .NET Core

Kev ua tau zoo hauv .NET Core

Tier Compilation

Hauv kuv tsab xov xwm kawg kuv tau piav txog qhov kev ua haujlwm no luv luv, kuv xav kho thiab ntxiv kuv cov lus. Multi-level compilation speeds up the startup time of your solution, tab sis koj txi uas feem ntawm koj cov cai yuav muab tso ua ke rau hauv ib tug ntau optimized version nyob rau hauv keeb kwm yav dhau, uas yuav qhia tau ib tug me me nyiaj siv ua haujlwm. Nrog lub advent ntawm NET Core 3.0, lub sij hawm tsim rau tej yaam num nrog tier muab tso ua ke enabled tau txo thiab kab mob txuam nrog no technology tau kho. Yav dhau los, cov thev naus laus zis no tau ua rau muaj kev ua yuam kev hauv thawj qhov kev thov hauv ASP.NET Core thiab khov thaum thawj zaug tsim hauv ntau qib kev sib sau ua ke. Tam sim no nws tau qhib los ntawm lub neej ntawd hauv .NET Core 3.0, tab sis koj tuaj yeem lov tes taw yog tias koj xav tau. Yog tias koj nyob hauv txoj haujlwm ntawm pab pawg-tus thawj coj, cov laus, nruab nrab, lossis koj yog tus thawj coj ntawm lub tuam tsev, ces koj yuav tsum nkag siab tias qhov kev tsim kho sai ua rau muaj txiaj ntsig ntawm pab pawg thiab cov thev naus laus zis no yuav tso cai rau koj txuag sijhawm rau ob tus neeg tsim khoom. thiab lub sijhawm ntawm qhov project nws tus kheej.

.NET qib nce

Txhim kho koj .NET Framework / .NET Core version. Feem ntau, txhua tus tshiab version muab kev ua tau zoo ntxiv thiab ntxiv cov yam ntxwv tshiab.

Tab sis dab tsi yog cov txiaj ntsig? Cia peb saib qee qhov ntawm lawv:

  • .NET Core 3.0 qhia R2R cov duab uas yuav txo tau lub sijhawm pib ntawm .NET Core daim ntawv thov.
  • Nrog rau version 2.2, Tier Compilation tshwm sim, ua tsaug rau cov programmers yuav siv sijhawm tsawg dua los tsim ib qhov project.
  • Kev them nyiaj yug rau tshiab .NET Standards.
  • Kev them nyiaj yug rau ib tug tshiab version ntawm lub programming lus.
  • Optimization, nrog rau txhua tus tshiab version qhov kev ua kom zoo ntawm cov tsev qiv ntawv hauv paus Sau/Struct/Stream/String/Regex thiab ntau yam ntxiv. Yog tias koj tab tom tsiv los ntawm .NET Framework rau .NET Core, koj yuav tau txais kev txhawb nqa loj tawm ntawm lub thawv. Ua piv txwv, kuv xa ib qhov txuas rau qee qhov kev ua kom zoo uas tau ntxiv rau .NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Kev ua tau zoo hauv .NET Core

xaus

Thaum sau cov lej, nws tsim nyog them nqi rau ntau yam ntawm koj qhov project thiab siv cov yam ntxwv ntawm koj cov lus programming thiab platform kom ua tiav qhov txiaj ntsig zoo tshaj plaws. Kuv yuav zoo siab yog tias koj qhia koj cov kev paub txog kev ua kom zoo hauv .NET.

Txuas rau github

Tau qhov twg los: www.hab.com

Ntxiv ib saib