Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

Kia ora katoa! Ko tenei tuhinga he kohinga o nga Tikanga Pai kua roa matou ko aku hoa mahi e mahi ana i nga kaupapa rereke.

Nga korero mo te miihini i mahia ai nga tatauranga:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U PTM 1.60GHz (Kaby Lake R), 1 PTM, 8 arorau me te 4 matua tinana
.NET Core SDK=3.0.100
[Kaihautū]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Matua: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Kaihautū]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Matua: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Waima Whakahaere Matua=Mahi

ToList vs ToArray and Cycles


I whakamahere ahau ki te whakarite i enei korero me te tukunga o .NET Core 3.0, engari i whiua ahau e ratou, kaore au e hiahia ki te tahae i te kororia o tetahi atu me te kape i nga korero a etahi atu, no reira ka tohu noa ahau. hono ki tetahi tuhinga pai e whakaahuahia ana te whakataurite.

Mo ahau ake, kei te hiahia ahau ki te whakaatu atu ki a koe aku inenga me aku huanga; I taapirihia e au nga koropiko whakamuri ki a raatau mo te hunga e aroha ana ki te "C++ style" o te tuhi koropiko.

Waehere:

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

He rite tonu nga tere mahi i roto i te .NET Core 2.2 me 3.0. Anei nga mea i taea e au ki te .NET Core 3.0:

Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

Ka taea e matou te whakatau he tere ake te tukatuka o te kohinga Array na ona arotautanga o roto me te tohatoha rahi o te kohinga. Me maumahara ano he kohinga Rarangi kei a ia ano nga painga me whakamahi koe i te kohinga tika i runga i nga tatauranga e hiahiatia ana. Ahakoa ka tuhia e koe te arorau mo te mahi me nga koropiko, kaua e wareware he kopikopiko noa tenei, kei raro ano hoki i te arotautanga ka taea. I whakaputaina he tuhinga mo te habr i mua noa atu: https://habr.com/ru/post/124910/. He mea tika tonu, he panui ano hoki.

Whanui

He tau ki muri, i mahi ahau i tetahi kamupene i runga i tetahi kaupapa tuku iho, i roto i taua kaupapa he mea noa ki te whakahaere i te whakamanatanga mara ma te hanga whakamatautau-hopu-maka. Kua mohio ahau i tera wa ko te whakaaro pakihi kino tenei mo te kaupapa, na i nga wa katoa ka taea e au te whakamatau kia kaua e whakamahi i taua hoahoa. Engari kia mohio tatou he aha i kino ai te huarahi ki te whakahaere i nga hapa me taua hanganga. I tuhia e ahau he waehere iti hei whakataurite i nga huarahi e rua me te hanga tohu tohu mo ia whiringa.

Waehere:

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

He rite nga hua o .NET Core 3.0 me Core 2.2 (.NET Core 3.0):

Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

Ko te ngana ki te hopu ka uaua ake te maarama me te whakanui ake i te wa mahi o to hotaka. Engari ki te hiahia koe ki tenei hanga, kaua e whakauru i nga rarangi o te waehere kaore e tika ana ki te hapai i nga hapa - ma tenei ka maama ake te mohio ki te waehere. Ko te tikanga, ehara i te mea ko te whakahaere i nga tuunga ka utaina te punaha, engari ko te whiu i nga hapa ma roto i te whiunga o te hanga Whakakotahitanga hou.

He puhoi ake te whiu i etahi o nga karaehe ka kohia te hapa i te whakatakotoranga e hiahiatia ana. Mena kei te tukatuka koe i tetahi puka, etahi raraunga ranei ka tino mohio koe he aha te hapa, he aha koe e kore ai e tukatuka?

Kaua koe e tuhi i te maka i te hanga Okotahi() hou mena ehara tenei ahuatanga i te mea rerekee. He tino utu te whakahaere me te maka i tetahi tuunga!!!

ToIraro, ToLowerInvariant, ToUpper, ToUpperInvariant

Neke atu i te 5 tau o taku wheako ki te mahi i runga i te papaaho .NET, kua kitea e au te maha o nga kaupapa e whakamahi ana i te taurite aho. I kite ano ahau i te pikitia e whai ake nei: kotahi te otinga hinonga me te maha o nga kaupapa, he rereke nga whakataurite aho. Engari he aha te whakamahi me pehea te whakakotahi? I roto i te pukapuka CLR ma C# na Richter, ka panui ahau i nga korero ko te tikanga ToUpperInvariant() he tere ake i te ToLowerInvariant().

Pukapuka mai i te pukapuka:

Mahinga i roto i te .NET Core

Ae ra, kare au i whakapono, ka whakatau ahau ki te whakahaere i etahi whakamatautau i tera wa i runga i te .NET Framework ka miharo te hua - neke atu i te 15% te pikinga o nga mahi. Na, i te taenga atu ki te mahi i te ata i muri mai, ka whakaatu ahau i enei inenga ki oku rangatira, ka hoatu ki a ratou te uru ki te waehere puna. Whai muri i tenei, 2 o nga kaupapa 14 i whakarerekehia hei whakauru i nga inenga hou, me te whakaaro kua noho enei kaupapa e rua ki te tukatuka i nga ripanga Excel nui, ko te hua he nui atu i te mea nui mo te hua.

Ka tukuna ano e ahau ki a koe nga inenga mo nga momo momo .NET Core, kia taea ai e ia tangata te whiriwhiri ki te otinga tino pai. A ka hiahia noa ahau ki te taapiri i tera i roto i te kamupene e mahi ana ahau, ka whakamahia e matou a ToUpper() hei whakataurite i nga aho.

Waehere:

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

Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

I roto i te .NET Core 3.0, ko te pikinga mo ia o enei tikanga ko ~x2 me te whakataurite i nga whakatinanatanga i waenganui ia ratou ano.

Mahinga i roto i te .NET Core

Mahinga i roto i te .NET Core

Tier Compilation

I roto i taku tuhinga whakamutunga i whakaahua poto ahau i tenei mahi, ka hiahia ahau ki te whakatika me te taapiri i aku kupu. Ko te whakahiato taumata-maha ka tere ake te wa whakaoho o to otinga, engari ka whakaekea e koe nga waahanga o to waehere ka whakahiatohia ki tetahi waahanga pai ake i te papamuri, ka taea te whakauru i tetahi waahanga iti. I te taenga mai o NET Core 3.0, kua heke te wa hanga mo nga kaupapa kua whakaahei te whakahiato taumata, kua whakatikahia nga pepeke e pa ana ki tenei hangarau. I mua, na tenei hangarau i puta nga hapa i roto i nga tono tuatahi i roto i te ASP.NET Core me te whakatio i te wa o te hanga tuatahi i roto i te aratau whakahiato taumata-maha. I tenei wa ka taea te taunoa i roto i te .NET Core 3.0, engari ka taea e koe te whakakore ki te hiahia koe. Mena kei roto koe i te tuunga o te kaiarahi-tiima, te tuakana, te waenganui, te upoko ranei o tetahi tari, me mohio koe ko te whakawhanaketanga kaupapa tere ka piki ake te uara o te roopu me tenei hangarau ka taea e koe te penapena wa mo nga kaihanga e rua. me te wa o te kaupapa ake.

.NET taumata ake

Whakapai ake i to .NET Framework / .NET Core putanga. I te nuinga o nga wa, ka whakawhiwhia e ia putanga hou etahi atu painga mahi me te taapiri i nga ahuatanga hou.

Engari he aha nga painga? Kia titiro tatou ki etahi o ratou:

  • I whakauruhia e NET Core 3.0 nga whakaahua R2R ka whakaiti i te wa whakaoho o nga tono .NET Core.
  • I te putanga 2.2, i puta mai te Tier Compilation, na te mea ka iti ake te wa e whakapaua ana e nga kaihōtaka ki te whakarewa kaupapa.
  • Tautoko mo nga Paerewa .NET hou.
  • Tautoko mo te putanga hou o te reo hotaka.
  • Te arotautanga, me ia putanga hou te arotautanga o nga whare pukapuka turanga Kohinga/Hanga/Stream/String/Regex me te maha atu. Mena kei te heke koe mai i te .NET Framework ki te .NET Core, ka whiwhi koe i te whakanui mahi nui mai i te pouaka. Hei tauira, ka whakapirihia e ahau he hononga ki etahi o nga arotautanga i taapiri atu ki te .NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Mahinga i roto i te .NET Core

mutunga

I te wa e tuhi ana i te waehere, he pai ki te aro ki nga ahuatanga rereke o to kaupapa me te whakamahi i nga ahuatanga o to reo hootaka me to papaahi kia eke ki te hua pai. Ka koa ahau ki te tohatoha koe i to matauranga e pa ana ki te arotautanga i roto i te .NET.

Hononga ki github

Source: will.com

Tāpiri i te kōrero