Hana ma .NET Core

Hana ma .NET Core

Hana ma .NET Core

Aloha kākou! ʻO kēia ʻatikala he hōʻuluʻulu o nā hana maikaʻi loa aʻu a me koʻu mau hoa hana i hoʻohana ai no ka manawa lōʻihi i ka hana ʻana i nā papahana like ʻole.

ʻIke e pili ana i ka mīkini i hana ʻia ai nā helu:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 logical a me 4 kino kino.
.NET Core SDK=3.0.100
[Host]: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
Kumu: .NET Kohu 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[Host]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
Kumu: .NET Kohu 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT

Job=Make Runtime=Mako

ToList vs ToArray a me nā pōʻai


Ua hoʻolālā wau e hoʻomākaukau i kēia ʻike me ka hoʻokuʻu ʻana o .NET Core 3.0, akā paʻi lākou iaʻu, ʻaʻole wau makemake e ʻaihue i ka hanohano o kekahi a kope i ka ʻike o nā poʻe ʻē aʻe, no laila e kuhikuhi wale wau. loulou i kahi ʻatikala maikaʻi kahi i wehewehe kikoʻī ʻia ai ka hoʻohālikelike.

Noʻu iho, makemake wau e hōʻike iā ʻoe i kaʻu mau ana a me nā hopena; Ua hoʻohui au i nā puka lou i hope iā lākou no ka poʻe aloha i ka "C++ style" o nā puka lou.

Kuhikuhi:

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

ʻAneʻane like nā māmā hana ma .NET Core 2.2 a me 3.0. Eia ka mea i hiki ia'u ke loaa ma .NET Core 3.0:

Hana ma .NET Core

Hana ma .NET Core

Hiki iā mākou ke hoʻoholo ʻoi aku ka wikiwiki o ka hoʻoili ʻana o kahi hōʻiliʻili Array ma muli o kāna mau loiloi kūloko a me ka hoʻokaʻawale ʻana i ka nui o ka hōʻiliʻili. Pono e hoʻomanaʻo ʻia he mau pono ponoʻī ko kahi hōʻiliʻili List a pono ʻoe e hoʻohana i ka hōʻiliʻili kūpono ma muli o nā helu i koi ʻia. ʻOiai inā ʻoe e kākau i ka loiloi no ka hana ʻana me nā puka lou, mai poina ʻo ia he loop maʻamau a hiki nō hoʻi i ka loiloi loop optimization. Ua paʻi ʻia kahi ʻatikala ma habr i kahi manawa lōʻihi aku nei: https://habr.com/ru/post/124910/. He kūpono a paipai ʻia ka heluhelu ʻana.

Kiola

I hoʻokahi makahiki i hala aku nei, ua hana au ma kahi hui ma kahi papahana hoʻoilina, ma ia papahana he mea maʻamau ka hana ʻana i ka hōʻoia kahua ma o ka hana hoʻāʻo-hopu-kiola. Ua hoʻomaopopo mua wau he loiloi ʻoihana maikaʻi ʻole kēia no ka papahana, no laila i ka wā hiki ke hoʻāʻo wau e hoʻohana ʻole i kēlā ʻano hoʻolālā. Akā, e noʻonoʻo kākou i ke kumu o ka hoʻokokoke ʻana i nā hewa me ia ʻano hana ʻino. Ua kākau wau i kahi code liʻiliʻi e hoʻohālikelike i nā ala ʻelua a hana i nā pae kuhikuhi no kēlā me kēia koho.

Kuhikuhi:

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

Loaʻa i nā hopena ma .NET Core 3.0 a me Core 2.2 ka hopena like (.NET Core 3.0):

Hana ma .NET Core

Hana ma .NET Core

ʻO ka hoʻāʻo ʻana i ka hopu e ʻoi aku ka paʻakikī o ke code a hoʻonui i ka manawa hoʻokō o kāu polokalamu. Akā inā makemake ʻoe i kēia kūkulu ʻana, ʻaʻole pono ʻoe e hoʻokomo i kēlā mau laina o ke code i manaʻo ʻole ʻia e mālama i nā hewa - e maʻalahi kēia i ke code e hoʻomaopopo. ʻO ka ʻoiaʻiʻo, ʻaʻole ia ka nui o ka mālama ʻana i nā ʻokoʻa e hoʻouka ai i ka ʻōnaehana, akā ʻo ka hoʻolei ʻana i nā hewa iā lākou iho ma o ka hoʻolei ʻana i kahi kūkulu Exception hou.

ʻOi aku ka lohi o ka hoʻolei ʻana i nā ʻokoʻa ma mua o kekahi papa e hōʻiliʻili i ka hewa ma ke ʻano i koi ʻia. Inā ʻoe e hana nei i kahi palapala a i ʻole kekahi ʻikepili a ʻike maopopo ʻoe i ke ʻano o ka hewa, no ke aha e hana ʻole ai?

ʻAʻole pono ʻoe e kākau i kahi kūkulu Exception () hou inā ʻaʻole ʻokoʻa kēia kūlana. He pipiʻi loa ka lawelawe ʻana a me ka hoʻolei ʻana i kahi ʻokoʻa!!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

I loko o kaʻu mau makahiki 5 o ka ʻike e hana ana ma ka .NET platform, ua loaʻa iaʻu nā papahana he nui i hoʻohana i ka hoʻohālikelike aho. Ua ʻike pū au i ke kiʻi aʻe: aia hoʻokahi hoʻonā Enterprise me nā papahana he nui, ʻokoʻa kēlā me kēia mea i hoʻohālikelike i nā string. Akā he aha ka mea e hoʻohana ai a pehea e hoʻohui ai? Ma ka puke CLR ma o C# na Richter, heluhelu au i ka ʻike e ʻoi aku ka wikiwiki o ke ʻano ToUpperInvariant() ma mua o ToLowerInvariant().

Wehe mai ka puke:

Hana ma .NET Core

ʻOiaʻiʻo, ʻaʻole wau i manaʻoʻiʻo a ua hoʻoholo wau e holo i kekahi mau hoʻāʻo a laila ma ka .NET Framework a ua hoʻokūhoihoi ka hopena iaʻu - ʻoi aku ma mua o 15% ka piʻi ʻana o ka hana. A laila, i ka hōʻea ʻana i ka hana i ke kakahiaka aʻe, hōʻike wau i kēia mau ana i koʻu mau luna a hāʻawi iā lākou i ke komo ʻana i ke code kumu. Ma hope o kēia, ua hoʻololi ʻia ka 2 o 14 mau papahana no ka hoʻokō ʻana i nā ana hou, a me ka noʻonoʻo ʻana ua loaʻa kēia mau papahana ʻelua e hoʻoponopono i nā papa Excel nui, ʻoi aku ka nui o ka hopena no ka huahana.

Ke hōʻike aku nei au iā ʻoe i nā ana no nā mana like ʻole o .NET Core, i hiki i kēlā me kēia o ʻoukou ke koho i ka hopena maikaʻi loa. A makemake wale wau e hoʻohui i kēlā i ka hui kahi aʻu e hana ai, hoʻohana mākou iā ToUpper () e hoʻohālikelike i nā kaula.

Kuhikuhi:

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

Hana ma .NET Core

Hana ma .NET Core

Ma ka .NET Core 3.0, ʻo ka hoʻonui ʻana no kēlā me kēia ʻano hana ʻo ~x2 a kaulike i nā hoʻokō i waena o lākou iho.

Hana ma .NET Core

Hana ma .NET Core

Houluulu Papa

Ma kaʻu ʻatikala hope ua wehewehe pōkole wau i kēia hana, makemake wau e hoʻoponopono a hoʻohui i kaʻu mau ʻōlelo. ʻO ka hoʻohui ʻana i nā pae he nui ka wikiwiki o ka manawa hoʻomaka o kāu hoʻonā, akā ke kaumaha nei ʻoe i nā ʻāpana o kāu code e hōʻuluʻulu ʻia i kahi mana i ʻoi aku ka maikaʻi ma ke kua, hiki ke hoʻolauna i kahi overhead liʻiliʻi. Me ka hiki ʻana mai o NET Core 3.0, ua emi ka manawa kūkulu no nā papahana me ka tier compilation enabled a ua hoʻopaʻa ʻia nā pōpoki pili me kēia ʻenehana. Ma mua, ua alakaʻi kēia ʻenehana i nā hewa i nā noi mua ma ASP.NET Core a hoʻokuʻu i ka wā o ke kūkulu mua ʻana i ke ʻano hoʻohuihui multi-level. Hoʻohana ʻia ia ma ka paʻamau ma .NET Core 3.0, akā hiki iā ʻoe ke hoʻopau iā ia inā makemake ʻoe. Inā ʻoe ma ke kūlana o ke alakaʻi kime, poʻokela, waena, a ʻo ʻoe paha ke poʻo o kahi ʻoihana, a laila pono ʻoe e hoʻomaopopo i ka hoʻomohala ʻana o ka papahana wikiwiki e hoʻonui i ka waiwai o ka hui a ʻo kēia ʻenehana e ʻae iā ʻoe e mālama i ka manawa no nā mea hoʻomohala ʻelua. a me ka manawa o ka papahana pono'ī.

.NET pae i luna

Hoʻonui i kāu mana .NET Framework / .NET Core. ʻO ka manawa pinepine, hāʻawi kēlā me kēia mana hou i nā lanakila hana hou a hoʻohui i nā hiʻohiʻona hou.

Akā he aha nā pōmaikaʻi? E nānā kākou i kekahi o lākou:

  • Hoʻokomo ʻo NET Core 3.0 i nā kiʻi R2R e hōʻemi i ka manawa hoʻomaka o nā noi NET Core.
  • Me ka mana 2.2, ua ʻike ʻia ʻo Tier Compilation, e hoʻomaikaʻi i nā mea polokalamu e hoʻolōʻihi i ka manawa e hoʻomaka ai i kahi papahana.
  • Kākoʻo no nā kūlana .NET hou.
  • Kākoʻo no ka mana hou o ka ʻōlelo papahana.
  • Optimization, me kēlā me kēia mana hou ka hoʻonui ʻana i nā waihona waihona waihona Collection / Struct / Stream / String / Regex a ʻoi aku ka maikaʻi. Inā ʻoe e neʻe ana mai ka .NET Framework a i ka .NET Core, e loaʻa iā ʻoe kahi hoʻoikaika nui o ka hana ma waho o ka pahu. No ka laʻana, hoʻopili wau i kahi loulou i kekahi o nā optimizations i hoʻohui ʻia i .NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Hana ma .NET Core

hopena

I ke kākau ʻana i nā code, pono e nānā i nā ʻano like ʻole o kāu papahana a me ka hoʻohana ʻana i nā hiʻohiʻona o kāu ʻōlelo papahana a me ka paepae e loaʻa ai ka hopena maikaʻi loa. E hauʻoli wau inā e kaʻana like ʻoe i kāu ʻike pili i ka optimization ma .NET.

loulou i github

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka