Kuita mu .NET Core

Kuita mu .NET Core

Kuita mu .NET Core

Mhoroi mose! Ichi chinyorwa muunganidzwa weMaitiro Akanakisisa ayo ini nevandinoshanda navo tanga tichishandisa kwenguva yakareba pakushanda pamapurojekiti akasiyana.

Ruzivo nezve muchina wakaitwa macalculations:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 zvine musoro uye mana emuviri cores
.NET Core SDK=3.0.100
[Host]: .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
[Host]: .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=Core Runtime=Core

ToList vs ToArray uye Cycles


Ndakaronga kugadzirira ruzivo urwu nekubudiswa kwe.NET Core 3.0, asi vakandirova kwairi, handidi kubira kubwinya kweumwe munhu uye kukopa ruzivo rwevamwe vanhu, saka ndinongotaura. batanidza kune chinyorwa chakanaka apo kuenzanisa kunotsanangurwa zvakadzama.

Ini pachangu, ndinongoda kukupa zviyero zvangu nemhedzisiro; Ini ndakawedzera reverse loops kwavari kune vanoda "C ++ maitiro" ekunyora zvishwe.

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

Kumhanya kwekuita mu.NET Core 2.2 uye 3.0 dzinenge dzakafanana. Hezvino izvo zvandakakwanisa kupinda .NET Core 3.0:

Kuita mu .NET Core

Kuita mu .NET Core

Tinogona kugumisa kuti kudzokororwa kweArray kuunganidzwa kunokurumidza nekuda kwekugadzirisa kwayo kwemukati uye kugovaniswa kwehukuru hwekuunganidza. Zvakakoshawo kuyeuka kuti Rondedzero yekuunganidza ine zvayakanakira uye iwe unofanirwa kushandisa muunganidzwa chaiwo zvichienderana nekuverenga kunodiwa. Kunyangwe iwe ukanyora zvine musoro zvekushanda nezvishwe, usakanganwe kuti iyi yakajairika loop uye zvakare iri pasi pekugona loop optimization. Chinyorwa chakaburitswa pa habr nguva refu yapfuura: https://habr.com/ru/post/124910/. Ichiri kushanda uye inokurudzirwa kuverenga.

Kanda

Gore rapfuura, ndakashanda pane imwe kambani pane purojekiti yenhaka, mupurojekiti iyoyo zvaive zvakajairika kugadzirisa kusimbiswa kwemunda kuburikidza nekuedza-kubata-kukanda kuvaka. Ini ndatonzwisisa ipapo kuti iyi yaive isina hutano bhizinesi logic yepurojekiti, saka pese pazvaibvira ndaiedza kusashandisa dhizaini yakadai. Asi ngationei kuti sei nzira yekubata zvikanganiso nekuvakwa kwakadaro kwakaipa. Ndakanyora kodhi diki kuenzanisa nzira mbiri uye ndakagadzira mabhenji kune yega yega sarudzo.

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

Zvabuda mu.NET Core 3.0 neCore 2.2 zvine mhedzisiro yakafanana (.NET Core 3.0):

Kuita mu .NET Core

Kuita mu .NET Core

Edza kubata kunoita kuti kodhi ive yakaoma kunzwisisa uye inowedzera nguva yekuita yechirongwa chako. Asi kana iwe uchida kuvaka uku, haufanirwe kuisa iyo mitsetse yekodhi isingatarisirwe kubata zvikanganiso - izvi zvichaita kuti kodhi ive nyore kunzwisisa. Muchokwadi, hazvisi zvakanyanya kubata kwezvisizvo izvo zvinoremedza sisitimu, asi kukanda zvikanganiso pachazvo kuburikidza nekukanda kutsva Kunze kuvaka.

Kukanda kunze kunononoka pane imwe kirasi inounganidza kukanganisa mufomati inodiwa. Kana iwe uri kugadzirisa fomu kana imwe data uye iwe unonyatsoziva kuti chii chikanganiso chinofanira kunge chiri, wadii kuchigadzirisa?

Iwe haufanirwe kunyora kukanda nyowani Exception() kuvaka kana mamiriro aya asiri akasiyana. Kubata uye kukanda zvakasarudzika kunodhura zvakanyanya !!!

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

Pamakore angu 5 eruzivo rwekushanda papuratifomu yeNET, ndasangana nemapurojekiti akawanda akashandisa tambo yekufananidza. Ndakaona zvakare mufananidzo unotevera: pakanga paine imwe Enterprise mhinduro ine akawanda mapurojekiti, imwe neimwe yaiita tambo kuenzanisa zvakasiyana. Asi chii chinofanira kushandiswa uye sei kubatanidza? Mubhuku CLR kuburikidza neC # naRichter, ndakaverenga ruzivo rwekuti ToUpperInvariant () nzira inokurumidza kupfuura ToLowerInvariant ().

Chidimbu kubva mubhuku:

Kuita mu .NET Core

Zvechokwadi, handina kuzvitenda uye ndakasarudza kumhanyisa mimwe miedzo ipapo paNET Framework uye mhedzisiro yakandishamisa - kupfuura 15% kuwedzera kwekuita. Ipapo, pakusvika kubasa mangwanani akatevera, ndakaratidza zviyero izvi kuvakuru vangu ndokuvapa kuwana kodhi yemabviro. Mushure meizvi, mapurojekiti maviri kubva pagumi nemana akachinjwa kuti aenderane nezviyero zvitsva, uye tichifunga kuti mapurojekiti maviri aya aivepo ekugadzirisa matafura makuru eExcel, mhedzisiro yacho yakanyanya kukosha pachigadzirwa.

Ini ndinopawo kwamuri kuyerwa kweshanduro dzakasiyana dze.NET Core, kuitira kuti mumwe nemumwe wenyu aite sarudzo yakanangana nemhinduro yakanyanya kunaka. Uye ini ndinongoda kuwedzera kuti mukambani yandinoshanda, tinoshandisa ToUpper () kuenzanisa tambo.

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

Kuita mu .NET Core

Kuita mu .NET Core

Mu.NET Core 3.0, kuwedzera kweimwe neimwe yenzira idzi ~x2 uye kunoyera mashandisirwo pakati pavo.

Kuita mu .NET Core

Kuita mu .NET Core

Tier Compilation

Muchinyorwa changu chekupedzisira ndakatsanangura kushanda uku muchidimbu, ndinoda kugadzirisa uye kuwedzera mazwi angu. Multi-level kuunganidza inomhanyisa nguva yekutanga yemhinduro yako, asi iwe unobayira kuti zvikamu zvekodhi yako zvichaunganidzwa mune imwe yakagadziridzwa vhezheni kumashure, iyo inogona kuunza diki pamusoro. Nekuuya kweNET Core 3.0, nguva yekuvaka yemapurojekiti ane tier kuunganidzwa yakagoneswa yadzikira uye mabhugi ane hukama neiyi tekinoroji akagadziriswa. Pakutanga, tekinoroji iyi yakatungamira kune zvikanganiso muzvikumbiro zvekutanga muASP.NET Core uye inoomesa panguva yekutanga kuvaka mune akawanda-level compilation mode. Parizvino inogoneswa nekusarudzika muNET Core 3.0, asi unogona kuidzima kana uchida. Kana iwe uri pachinzvimbo chemutungamiri wechikwata, mukuru, wepakati, kana iwe uri mukuru wedhipatimendi, saka unofanirwa kunzwisisa kuti kukurumidza kusimudzira chirongwa kunowedzera kukosha kwechikwata uye tekinoroji iyi ichakubvumidza iwe kuchengetedza nguva kune vese vanogadzira. uye nguva yeprojekti pachayo.

.NET level up

Simudzira yako .NET Framework / .NET Core shanduro. Kazhinji, imwe neimwe vhezheni itsva inopa humwe hunhu hwekuita uye inowedzera maficha matsva.

Asi zvii chaizvo zvinobatsira? Ngatitarisei mamwe acho:

  • .NET Core 3.0 yakaunza mifananidzo yeR2R inoderedza nguva yekutanga yeNET Core application.
  • Iine vhezheni 2.2, Tier Compilation yakaonekwa, nekuda kwekuti vanogadzira mapurogiramu vachapedza nguva shoma vachitanga chirongwa.
  • Tsigiro yeNew .NET Standards.
  • Tsigiro yeshanduro itsva yemutauro wechirongwa.
  • Optimization, neshanduro yega yega nyowani kukwidziridzwa kwemaraibhurari ekutanga Kuunganidza/Kuronga/Kuyerera/Mutambo/Regex uye zvimwe zvakawanda zvinovandudza. Kana uri kutama kubva kuNET Framework kuenda kuNET Core, uchawana kukwidzwa kukuru kwekuita kunze kwebhokisi. Semuenzaniso, ndinoisa chinongedzo kune mamwe magadzirirwo akawedzerwa ku.NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

Kuita mu .NET Core

mhedziso

Paunenge uchinyora kodhi, zvakakosha kuti utarise kune akasiyana maficha epurojekiti yako uye kushandisa maficha emutauro wako wechirongwa uye chikuva kuti uwane mhedzisiro yakanaka. Ndingafara kana ukagovera ruzivo rwako zvine chekuita nekugadzirisa mu.NET.

Batanidza kune github

Source: www.habr.com

Voeg