Kuchita mu .NET Core

Kuchita mu .NET Core

Kuchita mu .NET Core

Moni nonse! Nkhaniyi ndi mndandanda wa Zochita Zabwino zomwe anzanga ndi ine takhala tikugwiritsa ntchito kwa nthawi yayitali pogwira ntchito zosiyanasiyana.

Zambiri za makina omwe mawerengedwewo adawerengera:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 zomveka ndi 4 cores
.NET Core SDK=3.0.100
[Wothandizira]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Kore: .NET Kore 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Wothandizira]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Kore: .NET Kore 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Core Runtime=Core

ToList vs ToArray ndi Cycles


Ndinakonzekera kukonzekera chidziwitsochi ndi kumasulidwa kwa .NET Core 3.0, koma anandimenya, sindikufuna kuba ulemerero wa wina ndikutengera zambiri za anthu ena, kotero ndimangonena. ulalo ku nkhani yabwino pomwe kufananiza kumafotokozedwa mwatsatanetsatane.

M'malo mwa ine ndekha, ndikungofuna kukuwonetsani miyeso ndi zotsatira zanga; Ndinawonjezera malupu kwa iwo okonda "C ++ style" yolembera malupu.

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

Kuthamanga kwa machitidwe mu NET Core 2.2 ndi 3.0 ndi pafupifupi zofanana. Izi ndi zomwe ndidakwanitsa kulowa mu NET Core 3.0:

Kuchita mu .NET Core

Kuchita mu .NET Core

Titha kunena kuti kubwerezabwereza kwa gulu la Array ndikwachangu chifukwa cha kukhathamiritsa kwake mkati komanso kugawika kwa makulidwe otolera. Ndikoyeneranso kukumbukira kuti mndandanda wa List uli ndi ubwino wake ndipo muyenera kugwiritsa ntchito zosonkhanitsa zoyenera malinga ndi mawerengedwe ofunikira. Ngakhale mutalemba zomveka zogwirira ntchito ndi malupu, musaiwale kuti iyi ndi loop wamba ndipo imakhalanso ndi kukhathamiritsa kwa loop. Nkhani idasindikizidwa pa habr kalekale: https://habr.com/ru/post/124910/. Ikadali yofunikira komanso yovomerezeka kuwerenga.

Kutaya

Chaka chapitacho, ndinagwira ntchito pakampani ina yomwe inakhalapo kale, pulojekitiyi zinali zachilendo kukonza zovomerezeka pogwiritsa ntchito kuyesa-kuponya. Ndinamvetsetsa kale kuti iyi inali malingaliro olakwika abizinesi pantchitoyo, kotero ngati kuli kotheka ndimayesetsa kusagwiritsa ntchito kapangidwe kake. Koma tiyeni tiwone chifukwa chake njira yothanirana ndi zolakwika ndi zomangamanga zotere ndi yoyipa. Ndinalemba kachidindo kakang'ono kuti ndifanizire njira ziwirizo ndikupanga zizindikiro za njira iliyonse.

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

Zotsatira mu .NET Core 3.0 ndi Core 2.2 zili ndi zotsatira zofanana (.NET Core 3.0):

Kuchita mu .NET Core

Kuchita mu .NET Core

Kuyesera kugwira kumapangitsa khodi kukhala yovuta kumvetsetsa ndikuwonjezera nthawi yochitira pulogalamu yanu. Koma ngati mukufuna kumanga uku, simuyenera kuyika mizere ya ma code omwe sakuyenera kuthana ndi zolakwika - izi zipangitsa kuti code ikhale yosavuta kumvetsetsa. M'malo mwake, sizinthu zambiri zomwe zimagwira ntchito zopatula zomwe zimanyamula dongosolo, koma kuponya zolakwika zokha kudzera pakumanga kwatsopano Kwapadera.

Kupatulapo kumatenga pang'onopang'ono kuposa kalasi ina yomwe ingatenge zolakwika mumtundu wofunikira. Ngati mukukonza fomu kapena deta ndipo mukudziwa bwino lomwe cholakwikacho chiyenera kukhala, bwanji osachikonza?

Simuyenera kulemba kuponya kwatsopano Exception() ngati izi siziri zachilendo. Kugwira ndi kuponya chosiyana ndi okwera mtengo kwambiri !!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

Pazaka zanga zisanu ndikugwira ntchito pa nsanja ya .NET, ndakumana ndi mapulojekiti ambiri omwe amagwiritsa ntchito zingwe zofananira. Ndidawonanso chithunzi chotsatirachi: panali njira imodzi ya Enterprise yokhala ndi ma projekiti ambiri, iliyonse yomwe inkafananiza zingwe mosiyanasiyana. Koma zomwe ziyenera kugwiritsidwa ntchito komanso momwe mungagwirizanitse? M'buku la CLR kudzera pa C # lolemba Richter, ndinawerenga zambiri kuti njira ya ToUpperInvariant () ndiyofulumira kuposa ToLowerInvariant ().

M'bukuli:

Kuchita mu .NET Core

Inde, sindinakhulupirire ndipo ndinaganiza zoyesa mayesero kenako pa NET Framework ndipo zotsatira zake zinandidabwitsa - kuposa 15% kuwonjezeka kwa ntchito. Ndiyeno, nditafika kuntchito m’maΕ΅a wotsatira, ndinasonyeza mabwana anga miyeso imeneyi ndi kuwapatsa mwayi wopeza magwero a code. Zitatha izi, mapulojekiti awiri mwa 2 adasinthidwa kuti agwirizane ndi miyeso yatsopanoyi, ndipo poganizira kuti mapulojekiti awiriwa analipo pokonza matebulo akuluakulu a Excel, zotsatira zake zinali zofunika kwambiri pazogulitsa.

Ndikukupatsiraninso miyeso yamitundu yosiyanasiyana ya NET Core, kuti aliyense wa inu asankhe njira yabwino kwambiri. Ndipo ndikungofuna kuwonjezera kuti mu kampani yomwe ndimagwira ntchito, timagwiritsa ntchito ToUpper () kufananiza zingwe.

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

Kuchita mu .NET Core

Kuchita mu .NET Core

Mu NET Core 3.0, kuwonjezeka kwa njira iliyonseyi ndi ~ x2 ndikulinganiza zokhazikitsidwa pakati pawo.

Kuchita mu .NET Core

Kuchita mu .NET Core

Tier Compilation

M'nkhani yanga yomaliza ndinalongosola ntchitoyi mwachidule, ndikufuna kukonza ndi kuwonjezera mawu anga. Kuphatikizika kwamitundu ingapo kumafulumizitsa nthawi yoyambira yankho lanu, koma mumapereka kuti magawo a code yanu asonkhanitsidwa kukhala mtundu wokometsedwa kwambiri kumbuyo, womwe ungayambitse mutu wawung'ono. Kubwera kwa NET Core 3.0, nthawi yomanga ma projekiti okhala ndi tier compilation yatsika ndipo nsikidzi zolumikizidwa ndiukadaulowu zakhazikitsidwa. M'mbuyomu, ukadaulo uwu udayambitsa zolakwika pazofunsira zoyamba mu ASP.NET Core ndikuwumitsa pakumanga koyamba mumachitidwe ophatikiza amitundu yambiri. Pakali pano imayatsidwa mwachisawawa mu NET Core 3.0, koma mukhoza kuyimitsa ngati mukufuna. Ngati muli m'malo otsogolera gulu, wamkulu, wapakati, kapena ndinu mkulu wa dipatimenti, ndiye kuti muyenera kumvetsetsa kuti chitukuko chachangu cha polojekiti chimawonjezera mtengo wa gulu ndipo ukadaulo uwu umakupatsani mwayi wosunga nthawi kwa onse omwe akutukula. ndi nthawi ya polojekiti yokha.

NET kukwera

Sinthani mtundu wanu wa .NET Framework / .NET Core. Nthawi zambiri, mtundu uliwonse watsopano umapereka zopindulitsa zowonjezera ndikuwonjezera zatsopano.

Koma kodi ubwino wake ndi wotani? Tiyeni tiwone ena mwa iwo:

  • .NET Core 3.0 inayambitsa zithunzi za R2R zomwe zidzachepetse nthawi yoyambira ya .NET Core mapulogalamu.
  • Ndi mtundu wa 2.2, Tier Compilation idawonekera, chifukwa chomwe opanga mapulogalamu amathera nthawi yochepa kuyambitsa pulojekiti.
  • Thandizo la Miyezo yatsopano ya .NET.
  • Thandizo la mtundu watsopano wachilankhulo chokonzekera.
  • Kukhathamiritsa, ndi mtundu uliwonse watsopano kukhathamiritsa kwa malaibulale oyambira Kusonkhanitsa/Struct/Stream/String/Regex ndi zina zambiri zimasintha. Ngati mukusamuka kuchokera ku .NET Framework kupita ku NET Core, mudzapeza chiwongola dzanja chachikulu kuchokera mubokosilo. Mwachitsanzo, ndimalumikiza ulalo kuzinthu zina zomwe zidawonjezedwa ku NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Kuchita mu .NET Core

Pomaliza

Polemba kachidindo, ndikofunikira kulabadira mbali zosiyanasiyana za polojekiti yanu ndikugwiritsa ntchito mawonekedwe achilankhulo chanu komanso nsanja kuti mupeze zotsatira zabwino. Ndingasangalale mukagawana zomwe mukudziwa zokhudzana ndi kukhathamiritsa mu .NET.

Lumikizani ku github

Source: www.habr.com

Kuwonjezera ndemanga