Waxqabadka .NET Core

Waxqabadka .NET Core

Waxqabadka .NET Core

Salaamu caleykum Maqaalkani waa ururinta Hababka ugu Wanaagsan ee asxaabteyda iyo aniga aan isticmaaleyno waqti dheer markaan ka shaqeyneyno mashaariic kala duwan.

Macluumaadka ku saabsan mishiinka lagu sameeyay xisaabinta:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 macquul ah iyo 4 nooc oo muuqaal ah
NET Core SDK=3.0.100
[Mareeyaha]: .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
[Mareeyaha]: .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= Runtime Core=Core

Liiska ToList vs ToArray and Cycles


Waxaan qorsheeyay inaan macluumaadkan ku diyaariyo sii deynta .NET Core 3.0, laakiin way igu garaaceen, ma rabo inaan qof kale xado sharaftiisa oo aan koobiyo macluumaadka dadka kale, markaa waxaan kaliya tilmaami doonaa isku xidhka maqaal wanaagsan halkaas oo isbarbardhigga si faahfaahsan loogu sharraxay.

Anigoo ku hadlaya magacayga, kaliya waxaan rabaa inaan kuu soo bandhigo cabbiradeyda iyo natiijooyinka; Waxaan ku daray siddooyin kale oo loogu talagalay kuwa jecel "qaabka C++" ee wareegyada qorista.

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

Xawaaraha waxqabadka ee NET Core 2.2 iyo 3.0 waa isku mid. Waa kuwan waxa aan awooday inaan ka helo NET Core 3.0:

Waxqabadka .NET Core

Waxqabadka .NET Core

Waxaan ku soo gabagabeyn karnaa in habaynta isku dhafka ah ee ururinta Array ay dhakhso badan tahay sababtoo ah hagaajinteeda gudaha iyo qoondaynta cabbirka ururinta cad. Waxa kale oo mudan in la xasuusto in ururinta liisku ay leedahay faa'iidooyin u gaar ah waana inaad isticmaashaa ururinta saxda ah iyadoo ku xidhan xisaabinta loo baahan yahay. Xitaa haddii aad u qorto macquulka ah in lagu shaqeeyo wareegyada, ha iloobin in tani ay tahay wareeg caadi ah oo ay sidoo kale ku xiran tahay hagaajinta wareegga suurtogalka ah. Maqaal ayaa lagu daabacay habr wakhti dheer ka hor: https://habr.com/ru/post/124910/. Weli way khusaysaa oo akhrin lagu talinayaa.

Tuur

Sannad ka hor, waxaan ka shaqeeyay shirkad mashruuc dhaxal gal ah, mashruucaas waxa ay ahayd mid caadi ah in laga shaqeeyo ansixinta goobta iyada oo loo marayo dhismo isku day-qabasho ah. Waxaan horey u fahmay markaas in tani ay tahay macquul ganacsi oo aan caafimaad qabin mashruuca, sidaas darteed mar kasta oo ay suurtogal tahay waxaan isku dayay inaanan isticmaalin naqshad noocan oo kale ah. Laakiin aynu ogaano sababta habka wax looga qabanayo khaladaadka dhismaha noocan oo kale ah uu xun yahay. Waxaan qoray kood yar si aan isu barbar dhigo labada waji waxaanan sameeyay halbeegyo doorasho kasta.

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

Natiijooyinka ku jira NET Core 3.0 iyo Core 2.2 waxay leeyihiin natiijo isku mid ah (.NET Core 3.0):

Waxqabadka .NET Core

Waxqabadka .NET Core

Isku day qabashada ayaa ka dhigaysa kood adag in la fahmo oo waxa ay kordhisaa wakhtiga fulinta barnaamijkaaga. Laakiin haddii aad u baahan tahay dhismahan, waa inaadan gelin khadadka koodka ee aan la filaynin inay wax ka qabtaan khaladaadka - tani waxay fududaynaysaa in koodhka la fahmo. Dhab ahaantii, ma aha wax badan ka qabashada waxyaabaha ka reeban kan culeyska nidaamka, laakiin waa tuurista khaladaadka laftooda iyada oo loo marayo dhismaha cusub ee ka Reebka.

Tuuritaanka ka reebanaanshaha ayaa ka gaabis ah fasalada qaarkood kuwaas oo u soo ururin doona qaladka qaabka loo baahan yahay. Haddii aad habaynayso foom ama xog oo aad si cad u garanayso waxa khaladku yahay, maxaad u habayn wayday?

Waa inaadan qorin dhisme ka Reeban () cusub oo tuur haddii xaaladdani aanay ahayn mid gaar ah. Qabashada iyo tuurista ka reeban waa qaali!!!

Hooska, ToHooseInvariant, ToUpper, ToUpperInvariant

In ka badan 5 sano oo waayo-aragnimo ah oo aan ka shaqeynayay madal NET, waxaan la kulmay mashruucyo badan oo adeegsadey isbarbardhigga xargaha. Waxaan sidoo kale arkay sawirkan soo socda: waxaa jiray hal xal ganacsi oo leh mashruucyo badan, kuwaas oo mid kastaa uu sameeyay isbarbardhigga xargaha si ka duwan. Laakiin maxaa la isticmaali karaa iyo sida loo mideeyo? Buugga CLR ee loo sii marayo C # ee Richter, waxaan akhriyay macluumaadka in habka ToUpperInvariant() uu ka dhakhso badan yahay ToLowerInvariant().

Xigasho buugga:

Waxqabadka .NET Core

Dabcan, ma aanan rumaysan oo waxaan go'aansaday in aan sameeyo imtixaannada qaar ka dib qaabka NET Framework natiijaduna way iga naxday - in ka badan 15% kor u kaca waxqabadka. Kadib, markii aan shaqada imaaday subaxii xigay, waxaan tusay cabbiradaan madaxdayda waxaanan siiyey inay galaan koodhka isha. Taas ka dib, 2 ka mid ah 14-kii mashruuc ayaa la bedelay si ay u daboolaan cabbirada cusub, iyo iyadoo la tixgelinayo in labadan mashruuc ay jireen si loo farsameeyo miisaska Excel ee waaweyn, natiijadu waxay ahayd mid aad muhiim u ah alaabta.

Waxaan sidoo kale kuu soo bandhigayaa cabbirro noocyo kala duwan oo .NET Core ah, si mid kasta oo idinka mid ah uu u sameeyo doorashada xalka ugu habboon. Waxaana kaliya oo aan rabaa in aan ku daro in shirkadda aan ka shaqeeyo, waxaan isticmaalnaa ToUpper () si loo barbardhigo xargaha.

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

Waxqabadka .NET Core

Waxqabadka .NET Core

Gudaha NET Core 3.0, korodhka mid kasta oo ka mid ah hababkan waa ~ x2 waxayna dheellitiraysaa fulinta dhexdooda.

Waxqabadka .NET Core

Waxqabadka .NET Core

Ururinta Heerarka

Maqaalkeygii ugu dambeeyay waxaan si kooban u qeexay shaqadan, waxaan jeclaan lahaa inaan saxo oo aan ku kabo erayadayda. Isku-dubarid heerar kala duwani waxay dedejinaysaa wakhtiga bilawga ah ee xalkaaga, laakiin waxaad u huraysaa in qaybo ka mid ah koodkaaga lagu ururin doono nooc ka sii wanagsan xagga dambe, kaas oo soo bandhigi kara wax yar. Markii ay soo baxday NET Core 3.0, wakhtiga dhisitaanka mashaariicda leh iskudubarid heerar ayaa hoos u dhacay oo cayayaanka la xidhiidha tignoolajiyadan ayaa la hagaajiyay. Markii hore, tignoolajiyadani waxay horseedday khaladaad codsiyadii ugu horreeyay ee ASP.NET Core oo barafoobay intii lagu jiray dhismihii ugu horreeyay ee qaab iskudar heerar badan ah. Hadda waxaa si toos ah ugu shaqeeya NET Core 3.0, laakiin waad joojin kartaa haddii aad rabto. Haddii aad ku jirto booska hogaaminta kooxda, sare, dhexe, ama aad tahay madaxa waaxda, markaa waa inaad fahamtaa in horumarinta mashruuca degdega ah uu kordhinayo qiimaha kooxda iyo tignoolajiyadani waxay kuu ogolaaneysaa inaad waqti u badbaadiso labada horumariye. iyo wakhtiga mashruuca laftiisa.

NET kor u kac

Kordhi nooca NET Framework kaaga / .NET Core. Badanaa, nooc kasta oo cusub wuxuu bixiyaa faa'iidooyin waxqabad oo dheeraad ah wuxuuna ku darayaa astaamo cusub.

Laakiin waa maxay faa'iidooyinka dhabta ah? Bal aan eegno qaar ka mid ah:

  • NET Core 3.0 waxa ay soo bandhigtay sawiro R2R ah oo yarayn doona wakhtiga bilawga ah ee codsiyada NET Core.
  • Nooca 2.2, Tier Compilation ayaa soo muuqday, taas oo ay ugu mahadcelinayaan barnaamij-bixiyeyaasha ay waqti yar ku qaadan doonaan bilaabista mashruuca.
  • Taageerada Heerarka cusub ee NET
  • Taageerada nooca cusub ee luuqada barnaamijka
  • Hagaajinta, nooc kasta oo cusub ayaa hagaajinta maktabadaha aasaasiga ah Uruurinta/Qaabka/Streamka/String/Regex iyo wax badan oo kale ayaa soo hagaagaya. Haddii aad ka guurayso .NET Framework una guurayso .NET Core, waxaad heli doontaa kor u kaca waxqabadka weyn ee sanduuqa. Tusaale ahaan, waxaan ku lifaaqayaa xiriirinta qaar ka mid ah hagaajinta lagu daray NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Waxqabadka .NET Core

gunaanad

Markaad qoreyso koodka, waxaa habboon in aad fiiro gaar ah u yeelato dhinacyada kala duwan ee mashruucaaga oo aad isticmaasho sifooyinka luuqadaada barnaamijka iyo madal si aad u gaarto natiijada ugu fiican. Waan ku farxi lahaa haddii aad la wadaagto aqoontaada la xiriirta hagaajinta .NET.

Ku xidhka github

Source: www.habr.com

Add a comment