Anigoo ku hadlaya magacayga, kaliya waxaan rabaa inaan kuu soo bandhigo cabbiradeyda iyo natiijooyinka; Waxaan ku daray siddooyin kale oo loogu talagalay kuwa jecel "qaabka C++" ee wareegyada qorista.
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;
}
}
Xawaaraha waxqabadka ee NET Core 2.2 iyo 3.0 waa isku mid. Waa kuwan waxa aan awooday inaan ka helo NET Core 3.0:
Waxaan ku soo gabagabeyn karnaa in habaynta isku dhafka ah ee ururinta Array ay dhakhso badan tahay sababtoo ah hagaajinteeda gudaha iyo qoondaynta cabbirka ururinta cad. Waxa kale oo mudan in la xasuusto in ururinta liisku ay leedahay faa'iidooyin u gaar ah waana inaad isticmaashaa ururinta saxda ah iyadoo ku xidhan xisaabinta loo baahan yahay. Xitaa haddii aad u qorto macquulka ah in lagu shaqeeyo wareegyada, ha iloobin in tani ay tahay wareeg caadi ah oo ay sidoo kale ku xiran tahay hagaajinta wareegga suurtogalka ah. Maqaal ayaa lagu daabacay habr wakhti dheer ka hor: https://habr.com/ru/post/124910/. Weli way khusaysaa oo akhrin lagu talinayaa.
Tuur
Sannad ka hor, waxaan ka shaqeeyay shirkad mashruuc dhaxal gal ah, mashruucaas waxa ay ahayd mid caadi ah in laga shaqeeyo ansixinta goobta iyada oo loo marayo dhismo isku day-qabasho ah. Waxaan horey u fahmay markaas in tani ay tahay macquul ganacsi oo aan caafimaad qabin mashruuca, sidaas darteed mar kasta oo ay suurtogal tahay waxaan isku dayay inaanan isticmaalin naqshad noocan oo kale ah. Laakiin aynu ogaano sababta habka wax looga qabanayo khaladaadka dhismaha noocan oo kale ah uu xun yahay. Waxaan qoray kood yar si aan isu barbar dhigo labada waji waxaanan sameeyay halbeegyo doorasho kasta.
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;
}
Natiijooyinka ku jira NET Core 3.0 iyo Core 2.2 waxay leeyihiin natiijo isku mid ah (.NET Core 3.0):
Isku day qabashada ayaa ka dhigaysa kood adag in la fahmo oo waxa ay kordhisaa wakhtiga fulinta barnaamijkaaga. Laakiin haddii aad u baahan tahay dhismahan, waa inaadan gelin khadadka koodka ee aan la filaynin inay wax ka qabtaan khaladaadka - tani waxay fududaynaysaa in koodhka la fahmo. Dhab ahaantii, ma aha wax badan ka qabashada waxyaabaha ka reeban kan culeyska nidaamka, laakiin waa tuurista khaladaadka laftooda iyada oo loo marayo dhismaha cusub ee ka Reebka.
Tuuritaanka ka reebanaanshaha ayaa ka gaabis ah fasalada qaarkood kuwaas oo u soo ururin doona qaladka qaabka loo baahan yahay. Haddii aad habaynayso foom ama xog oo aad si cad u garanayso waxa khaladku yahay, maxaad u habayn wayday?
In ka badan 5 sano oo waayo-aragnimo ah oo aan ka shaqeynayay madal NET, waxaan la kulmay mashruucyo badan oo adeegsadey isbarbardhigga xargaha. Waxaan sidoo kale arkay sawirkan soo socda: waxaa jiray hal xal ganacsi oo leh mashruucyo badan, kuwaas oo mid kastaa uu sameeyay isbarbardhigga xargaha si ka duwan. Laakiin maxaa la isticmaali karaa iyo sida loo mideeyo? Buugga CLR ee loo sii marayo C # ee Richter, waxaan akhriyay macluumaadka in habka ToUpperInvariant() uu ka dhakhso badan yahay ToLowerInvariant().
Xigasho buugga:
Dabcan, ma aanan rumaysan oo waxaan go'aansaday in aan sameeyo imtixaannada qaar ka dib qaabka NET Framework natiijaduna way iga naxday - in ka badan 15% kor u kaca waxqabadka. Kadib, markii aan shaqada imaaday subaxii xigay, waxaan tusay cabbiradaan madaxdayda waxaanan siiyey inay galaan koodhka isha. Taas ka dib, 2 ka mid ah 14-kii mashruuc ayaa la bedelay si ay u daboolaan cabbirada cusub, iyo iyadoo la tixgelinayo in labadan mashruuc ay jireen si loo farsameeyo miisaska Excel ee waaweyn, natiijadu waxay ahayd mid aad muhiim u ah alaabta.
Waxaan sidoo kale kuu soo bandhigayaa cabbirro noocyo kala duwan oo .NET Core ah, si mid kasta oo idinka mid ah uu u sameeyo doorashada xalka ugu habboon. Waxaana kaliya oo aan rabaa in aan ku daro in shirkadda aan ka shaqeeyo, waxaan isticmaalnaa ToUpper () si loo barbardhigo xargaha.
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();
}
Gudaha NET Core 3.0, korodhka mid kasta oo ka mid ah hababkan waa ~ x2 waxayna dheellitiraysaa fulinta dhexdooda.
Ururinta Heerarka
Maqaalkeygii ugu dambeeyay waxaan si kooban u qeexay shaqadan, waxaan jeclaan lahaa inaan saxo oo aan ku kabo erayadayda. Isku-dubarid heerar kala duwani waxay dedejinaysaa wakhtiga bilawga ah ee xalkaaga, laakiin waxaad u huraysaa in qaybo ka mid ah koodkaaga lagu ururin doono nooc ka sii wanagsan xagga dambe, kaas oo soo bandhigi kara wax yar. Markii ay soo baxday NET Core 3.0, wakhtiga dhisitaanka mashaariicda leh iskudubarid heerar ayaa hoos u dhacay oo cayayaanka la xidhiidha tignoolajiyadan ayaa la hagaajiyay. Markii hore, tignoolajiyadani waxay horseedday khaladaad codsiyadii ugu horreeyay ee ASP.NET Core oo barafoobay intii lagu jiray dhismihii ugu horreeyay ee qaab iskudar heerar badan ah. Hadda waxaa si toos ah ugu shaqeeya NET Core 3.0, laakiin waad joojin kartaa haddii aad rabto. Haddii aad ku jirto booska hogaaminta kooxda, sare, dhexe, ama aad tahay madaxa waaxda, markaa waa inaad fahamtaa in horumarinta mashruuca degdega ah uu kordhinayo qiimaha kooxda iyo tignoolajiyadani waxay kuu ogolaaneysaa inaad waqti u badbaadiso labada horumariye. iyo wakhtiga mashruuca laftiisa.
Laakiin waa maxay faa'iidooyinka dhabta ah? Bal aan eegno qaar ka mid ah:
NET Core 3.0 waxa ay soo bandhigtay sawiro R2R ah oo yarayn doona wakhtiga bilawga ah ee codsiyada NET Core.
Nooca 2.2, Tier Compilation ayaa soo muuqday, taas oo ay ugu mahadcelinayaan barnaamij-bixiyeyaasha ay waqti yar ku qaadan doonaan bilaabista mashruuca.
Taageerada Heerarka cusub ee NET
Taageerada nooca cusub ee luuqada barnaamijka
Hagaajinta, nooc kasta oo cusub ayaa hagaajinta maktabadaha aasaasiga ah Uruurinta/Qaabka/Streamka/String/Regex iyo wax badan oo kale ayaa soo hagaagaya. Haddii aad ka guurayso .NET Framework una guurayso .NET Core, waxaad heli doontaa kor u kaca waxqabadka weyn ee sanduuqa. Tusaale ahaan, waxaan ku lifaaqayaa xiriirinta qaar ka mid ah hagaajinta lagu daray NET Core 3.0: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/
gunaanad
Markaad qoreyso koodka, waxaa habboon in aad fiiro gaar ah u yeelato dhinacyada kala duwan ee mashruucaaga oo aad isticmaasho sifooyinka luuqadaada barnaamijka iyo madal si aad u gaarto natiijada ugu fiican. Waan ku farxi lahaa haddii aad la wadaagto aqoontaada la xiriirta hagaajinta .NET.