Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

Sannu duka! Wannan labarin tarin Kyawawan Ayyuka ne waɗanda ni da abokan aiki na muke amfani da su na dogon lokaci yayin aiki akan ayyuka daban-daban.

Bayani game da injin da aka yi lissafin a kai:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 ma'ana da kuma 4 na zahiri
NET Core SDK=3.0.100
[Mai watsa shiri]: .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
[Mai watsa shiri]: .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

Aiki=Mahimmanci lokacin aiki=Mahimmanci

ToList vs ToArray da Cycles


Na shirya shirya wannan bayanin tare da sakin .NET Core 3.0, amma sun buge ni da shi, ba na so in saci daukakar wani kuma in kwafi bayanan wasu, don haka zan nuna kawai. haɗi zuwa labarin mai kyau inda aka kwatanta kwatanta dalla-dalla.

A madadina, kawai ina so in gabatar muku da ma'aunina da sakamakona; Na ƙara musu madaukai na juyi don masu son salon "C++" na rubuta madaukai.

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

Gudun ayyuka a cikin NET Core 2.2 da 3.0 kusan iri ɗaya ne. Ga abin da na sami damar samu a cikin NET Core 3.0:

Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

Za mu iya ƙarasa da cewa sarrafa juzu'i na tarin Array yana da sauri saboda haɓakawa na ciki da ƙayyadaddun girman tarin bayyane. Hakanan yana da kyau a tuna cewa tarin Lissafi yana da fa'idodinsa kuma yakamata kuyi amfani da tarin da ya dace dangane da lissafin da ake buƙata. Ko da ka rubuta dabaru don aiki tare da madaukai, kar ka manta cewa wannan madauki ne na yau da kullun kuma yana da yuwuwar inganta madauki. An buga labarin a kan habr tuntuni: https://habr.com/ru/post/124910/. Har yanzu yana da dacewa kuma yana da shawarar karantawa.

Jefa

Shekara guda da ta wuce, na yi aiki a wani kamfani kan aikin gado, a cikin wannan aikin ya kasance al'ada don aiwatar da ingantaccen filin ta hanyar ginawa-kamun-jifa. Na riga na gane cewa wannan ba daidai ba ne na kasuwancin kasuwanci don aikin, don haka duk lokacin da zai yiwu na yi ƙoƙarin kada in yi amfani da irin wannan zane. Amma bari mu gano dalilin da yasa hanyar magance kurakurai tare da irin wannan ginin ba shi da kyau. Na rubuta ƙaramin lamba don kwatanta hanyoyin biyu kuma na yi maƙasudin kowane zaɓi.

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

Sakamakon a cikin NET Core 3.0 da Core 2.2 suna da irin wannan sakamako (.NET Core 3.0):

Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

Gwada kama yana sa lambar ta yi wahalar fahimta kuma tana ƙara lokacin aiwatar da shirin ku. Amma idan kuna buƙatar wannan ginin, bai kamata ku saka waɗancan layukan lambobin da ba a tsammanin za su iya magance kurakurai ba - wannan zai sauƙaƙa fahimtar lambar. A gaskiya ma, ba wai sarrafa abubuwan keɓancewa ne ke ɗaukar tsarin ba, amma jefa kurakurai da kansu ta hanyar jefa sabon keɓancewar gini.

Keɓancewar jifa yana da hankali fiye da wasu aji waɗanda zasu tattara kuskure a tsarin da ake buƙata. Idan kuna sarrafa fom ko wasu bayanai kuma kun san sarai menene kuskuren ya kamata ya zama, me zai hana ku sarrafa shi?

Kada ku rubuta sabon jifa Exception() ginawa idan wannan yanayin bai kasance na musamman ba. Gudanarwa da jefa banda yana da tsada sosai !!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

A cikin shekaru 5 na gwaninta na aiki a kan dandalin NET, na ci karo da ayyuka da yawa waɗanda suka yi amfani da ma'auni. Na kuma ga hoto mai zuwa: akwai mafita na Kasuwanci guda ɗaya tare da ayyuka da yawa, kowannensu yayi kwatancen kirtani daban. Amma abin da ya kamata a yi amfani da kuma yadda za a haɗe shi? A cikin littafin CLR ta hanyar C # na Richter, na karanta bayanin cewa hanyar ToUpperInvariant () ta fi ToLowerInvariant ().

An karbo daga littafin:

Ayyuka a cikin NET Core

Tabbas, ban yi imani da shi ba kuma na yanke shawarar gudanar da wasu gwaje-gwaje sannan akan Tsarin NET kuma sakamakon ya gigice ni - fiye da 15% haɓaka aikin. Sa'an nan, da isowa wurin aiki washegari, na nuna waɗannan ma'auni ga manyana kuma na ba su damar samun lambar tushe. Bayan wannan, an canza ayyukan 2 cikin 14 don ɗaukar sabbin ma'auni, kuma la'akari da cewa waɗannan ayyukan biyu sun wanzu don aiwatar da manyan tebur na Excel, sakamakon ya fi mahimmanci ga samfurin.

Ina kuma gabatar muku da ma'auni don nau'ikan .NET Core daban-daban, ta yadda kowannenku zai iya yin zaɓin mafi kyawun mafita. Kuma ina so in ƙara cewa a cikin kamfanin da nake aiki, muna amfani da ToUpper() don kwatanta kirtani.

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

Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

A cikin NET Core 3.0, haɓaka ga kowane ɗayan waɗannan hanyoyin shine ~ x2 kuma yana daidaita aiwatarwa a tsakanin su.

Ayyuka a cikin NET Core

Ayyuka a cikin NET Core

Tarin Tier

A cikin labarina na ƙarshe na bayyana wannan aikin a taƙaice, Ina so in gyara kuma in ƙara maganata. Tarin matakai da yawa yana haɓaka lokacin farawa na maganin ku, amma kuna sadaukarwa cewa sassan lambar ku za a haɗa su zuwa mafi ingantaccen sigar a bango, wanda zai iya gabatar da ƙaramin sama. Tare da zuwan NET Core 3.0, lokacin ginawa don ayyukan tare da haɗa matakan matakan ya ragu kuma an gyara kwari masu alaƙa da wannan fasaha. A baya can, wannan fasaha ta haifar da kurakurai a cikin buƙatun farko a cikin ASP.NET Core kuma yana daskarewa yayin ginin farko a cikin yanayin haɗawa da yawa. A halin yanzu ana kunna ta ta tsohuwa a cikin NET Core 3.0, amma kuna iya kashe shi idan kuna so. Idan kun kasance a matsayin jagorar kungiya, babba, tsakiya, ko kuma kai ne shugaban sashen, to dole ne ku fahimci cewa saurin ci gaban ayyukan yana ƙara darajar ƙungiyar kuma wannan fasaha za ta ba ku damar adana lokaci ga masu haɓakawa biyu. da lokacin aikin da kansa.

NET ya tashi

Haɓaka sigar NET Tsarin ku / .NET Core. Sau da yawa, kowane sabon siga yana ba da ƙarin fa'idar aiki kuma yana ƙara sabbin abubuwa.

Amma menene ainihin amfanin? Mu duba wasu daga cikinsu:

  • NET Core 3.0 ya gabatar da hotunan R2R wanda zai rage lokacin farawa na NET Core aikace-aikace.
  • Tare da sigar 2.2, Tier Compilation ya bayyana, godiya ga abin da masu shirye-shirye za su kashe ɗan lokaci don ƙaddamar da aikin.
  • Goyon baya ga sababbin .NET Standards.
  • Taimakawa sabon sigar harshen shirye-shirye.
  • Haɓakawa, tare da kowane sabon juzu'in haɓakar ɗakunan karatu na tushe Tarin / Tsarin / Rarraba / String / Regex da ƙari mai yawa. Idan kuna ƙaura daga NET Framework zuwa NET Core, za ku sami babban haɓaka aiki daga cikin akwatin. A matsayin misali, na haɗa hanyar haɗi zuwa wasu haɓakawa waɗanda aka ƙara zuwa NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Ayyuka a cikin NET Core

ƙarshe

Lokacin rubuta lambar, yana da kyau a mai da hankali kan fannoni daban-daban na aikinku da yin amfani da fasalulluka na yaren shirye-shiryen ku da dandamali don samun sakamako mafi kyau. Zan yi farin ciki idan kun raba ilimin ku game da ingantawa a cikin NET.

Hanyar zuwa github

source: www.habr.com

Add a comment