.NET рдХреЛрд░ рдорд╛ рдкреНрд░рджрд░реНрд╢рди

рд╕рдмреИрд▓рд╛рдИ рдирдорд╕реНрдХрд╛рд░! рдпреЛ рд▓реЗрдЦ рдореЗрд░рд╛ рд╕рд╣рдХрд░реНрдореАрд╣рд░реВ рд░ рдореИрд▓реЗ рд▓рд╛рдореЛ рд╕рдордпрджреЗрдЦрд┐ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛред
рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдореЗрд╕рд┐рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА:рдмреЗрдиреНрдЪрдорд╛рд░реНрдХрдбрдЯрдиреЗрдЯ=v0.11.5, рдУрдПрд╕=рд╡рд┐рдиреНрдбреЛрдЬ резреж.реж.резреорейремреи
рдЗрдиреНрдЯреЗрд▓ рдХреЛрд░ i5-8250U CPU рез.ремрежGHz (Kaby Lake R), рез CPU, рео рд▓рдЬрд┐рдХрд▓ рд░ рек рднреМрддрд┐рдХ рдХреЛрд░
.NET рдХреЛрд░ SDK=рей.реж.резрежреж
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬрд┐рдЯ
рдХреЛрд░: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬреЗрдЖрдИрдЯреА
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬрд┐рдЯ
рдХреЛрд░: .NET рдХреЛрд░ реи.реи.рен (рдХреЛрд░рд╕реАрдПрд▓рдЖрд░ рек.рем.реиреорежрежрео.режреи, рдХреЛрд░рдПрдлрдПрдХреНрд╕ рек.рем.реиреорежрежрео.режрей), ремрек рдмрд┐рдЯ рд░рдпреБрдЬреЗрдЖрдИрдЯреА
рдХрд╛рдо = рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо = рдХреЛрд░
ToList рдмрдирд╛рдо ToArray рд░ рд╕рд╛рдЗрдХрд▓рд╣рд░реВ
рдореИрд▓реЗ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА .NET Core 3.0 рдХреЛ рд░рд┐рд▓реАрдЬрд╕рдБрдЧреИ рддрдпрд╛рд░ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдХреЛ рдерд┐рдПрдБ, рддрд░ рдо рдпрд╕рдорд╛ рдЪреБрдХреЗрдБ, рдо рдХрд╕реИрдХреЛ рдорд╣рд┐рдорд╛ рдЪреЛрд░реНрди рд░ рдХрд╕реИрдХреЛ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдЙрди рдЪрд╛рд╣рдиреНрди, рддреНрдпрд╕реИрд▓реЗ рдо рдпрд╕рд▓рд╛рдИ рдФрдВрд▓реНрдпрд╛рдЙрдБрдЫреБред .
рдореЗрд░реЛ рддрд░реНрдлрдмрд╛рдЯ, рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдореЗрд░реЛ рдорд╛рдкрди рд░ рдирддрд┐рдЬрд╛рд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ; рдореИрд▓реЗ рд▓реЗрдЦрди рдЪрдХреНрд░рдХреЛ "C++ рд╢реИрд▓реА" рдорди рдкрд░рд╛рдЙрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдЙрд▓реНрдЯреЛ рдЪрдХреНрд░рд╣рд░реВ рдердкреЗрдХреЛ рдЫреБред
рдХреЛрдб:
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;
}
}
.NET Core 2.2 рд░ 3.0 рдорд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрднрдЧ рд╕рдорд╛рди рдЫред .NET Core 3.0 рдорд╛ рдореИрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреЗрдХреЛ рдХреБрд░рд╛ рдпрд╣рд╛рдБ рдЫ:


рд╣рд╛рдореА рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреБрдЧреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рдПрд░реЗ рд╕рдЩреНрдХрд▓рдирдХреЛ рдЪрдХреНрд░реАрдп рдкреНрд░рд╢реЛрдзрди рдпрд╕рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рдЕрдиреБрдХреВрд▓рди рд░ рд╕рдЩреНрдХрд▓рди рдЖрдХрд╛рд░рдХреЛ рд╕реНрдкрд╖реНрдЯ рдЖрд╡рдВрдЯрдирдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЫрд┐рдЯреЛ рд╣реБрдиреНрдЫред рдпреЛ рдкрдирд┐ рд╕рдореНрдЭрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рд╕реВрдЪреА рд╕рдЩреНрдХрд▓рдирдХреЛ рдЖрдлреНрдиреИ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН рд░ рддрдкрд╛рдИрдВрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛рд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рд╕рдЩреНрдХрд▓рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЪрдХреНрд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рддрд░реНрдХ рд▓реЗрдЦреНрдиреБрднрдпреЛ рднрдиреЗ рдкрдирд┐, рдпреЛ рдирд┐рдпрдорд┐рдд рд▓реВрдк рд╣реЛ рд░ рдпреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рдЪрдХреНрд░ рдЕрдиреБрдХреВрд▓рдирдХреЛ рд╡рд┐рд╖рдп рдкрдирд┐ рд╣реЛ рднрдиреЗрд░ рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реНред рдзреЗрд░реИ рд╕рдордп рдЕрдШрд┐ habr рдорд╛ рдПрдЙрдЯрд╛ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рднрдПрдХреЛ рдерд┐рдпреЛ: рдпреЛ рдЕрдЭреИ рдкрдирд┐ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫ рд░ рдкрдвреНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫред
Thrower
рдПрдХ рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ рдореИрд▓реЗ рдПрдЙрдЯрд╛ рдХрдореНрдкрдиреАрдорд╛ рдПрдЙрдЯрд╛ рд▓рд┐рдЧреЗрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рдХрд╛рдо рдЧрд░реЗрдХреЛ рдерд┐рдПрдБ, рддреНрдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛ рдЯреНрд░рд╛рдЗ-рдХреНрдпрд╛рдЪ-рдереНрд░реЛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрд╕рди рдорд╛рд░реНрдлрдд рдлрд┐рд▓реНрдб рднреНрдпрд╛рд▓рд┐рдбреЗрд╕рди рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБ рд╕рд╛рдорд╛рдиреНрдп рдерд┐рдпреЛред рдореИрд▓реЗ рддреНрдпрддрд┐рдмреЗрд▓рд╛ рдиреИ рдмреБрдЭреЗрдХреЛ рдерд┐рдПрдБ рдХрд┐ рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╕реНрд╡рд╕реНрде рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рд╕рдореНрднрд╡ рднрдПрд╕рдореНрдо рдпрд╕реНрддреЛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрд╕рди рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВред рддрд░ рдпрд╕реНрддреЛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрд╕рдирд╕рдБрдЧ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рди рдЦрд░рд╛рдм рдЫ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдФрдВред рдореИрд▓реЗ рджреБрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛ рдЧрд░реНрди рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдХреЛрдб рд▓реЗрдЦреЗрдВ рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд▓рд╛рдЧрд┐ "рдмреЗрдиреНрдЪрдорд╛рд░реНрдХ" рд▓рд┐рдПрдБред
рдХреЛрдб:
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;
}.NET Core 3.0 рд░ Core 2.2 рдорд╛ рдирддрд┐рдЬрд╛рд╣рд░реВ рд╕рдорд╛рди рдЫрдиреН (.NET Core 3.0):


Try catch рд▓реЗ рдХреЛрдб рдмреБрдЭреНрди рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ рд░ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдордХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдмрдврд╛рдЙрдБрдЫред рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдирд┐рд░реНрдорд╛рдг рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдирдЧрд░рд┐рдПрдХрд╛ рдХреЛрдбрдХрд╛ рд▓рд╛рдЗрдирд╣рд░реВ рдШреБрд╕рд╛рдЙрдиреБрд╣реЛрд╕реН - рдпрд╕рд▓реЗ рдХреЛрдб рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдиреЗрдЫред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рдзреЗрд░реИ рдЕрдкрд╡рд╛рдж рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩ рд╣реЛрдЗрди рдЬрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рд▓реЛрдб рдЧрд░реНрдЫ, рддрд░ throw new Exception рдирд┐рд░реНрдорд╛рдг рдорд╛рд░реНрдлрдд рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЖрдлреИрдВ рдлреНрдпрд╛рдБрдХреНрдЫред
рдЕрдкрд╡рд╛рджрд╣рд░реВ рдлреНрдпрд╛рдБрдХреНрдиреБ рдХреЗрд╣реА рд╡рд░реНрдЧрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рд╕рд╣реА рдврд╛рдБрдЪрд╛рдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рдХреБрдиреИ рдлрд╛рд░рдо рд╡рд╛ рдХреЗрд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд╣реБрдиреБрдкрд░реНрдЫ рднрдиреЗ, рдХрд┐рди рдпрд╕рд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдирдЧрд░реНрдиреЗ?
рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдЕрд╕рд╛рдзрд╛рд░рдг рдирднрдПрд╕рдореНрдо рддрдкрд╛рдИрдВрд▓реЗ throw new Exception() construct рд▓реЗрдЦреНрдиреБ рд╣реБрдБрджреИрдиред рдЕрдкрд╡рд╛рджрд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреБ рд░ рдлреНрдпрд╛рдБрдХреНрдиреБ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫ!!!
ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant
.NET рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдХрд╛рдо рдЧрд░реЗрдХреЛ рдореЗрд░реЛ рел рд╡рд░реНрд╖рдХреЛ рдЕрдиреБрднрд╡рдорд╛, рдореИрд▓реЗ рдзреЗрд░реИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рднреЗрдЯреЗрдХреЛ рдЫреБ рдЬрд╕рд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩ рддреБрд▓рдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдереЗред рдореИрд▓реЗ рдирд┐рдореНрди рддрд╕реНрд╡реАрд░ рдкрдирд┐ рджреЗрдЦреЗрдХреЛ рдЫреБ: рдзреЗрд░реИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рднрдПрдХреЛ рдПрдЙрдЯрд╛ рдЗрдиреНрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдорд╛рдзрд╛рди рдерд┐рдпреЛ, рдЬрд╕рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩ рддреБрд▓рдирд╛ рдлрд░рдХ рддрд░рд┐рдХрд╛рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдереНрдпреЛред рддрд░ рдХреЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдПрдХреАрдХреГрдд рдЧрд░реНрдиреЗ? рд░рд┐рдХреНрдЯрд░рдХреЛ рдкреБрд╕реНрддрдХ CLR via C# рдорд╛, рдореИрд▓реЗ ToUpperInvariant() рд╡рд┐рдзрд┐ ToLowerInvariant() рднрдиреНрджрд╛ рдЫрд┐рдЯреЛ рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдвреЗрдХреЛ рдЫреБред
рдкреБрд╕реНрддрдХрдмрд╛рдЯ рдЕрдВрд╢:

рдЕрд╡рд╢реНрдп рдкрдирд┐, рдореИрд▓реЗ рдпреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░рд┐рдирдБ рд░ рддреНрдпрддрд┐рдмреЗрд▓рд╛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХрдорд╛ рдХреЗрд╣реА рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ рд░ рдирддрд┐рдЬрд╛рд▓реЗ рдорд▓рд╛рдИ рд╕реНрддрдмреНрдз рдмрдирд╛рдпреЛ - рдЙрддреНрдкрд╛рджрдХрддрд╛рдорд╛ резрел% рднрдиреНрджрд╛ рдмрдвреА рд╡реГрджреНрдзрд┐ред рддреНрдпрд╕рдкрдЫрд┐, рднреЛрд▓рд┐рдкрд▓реНрдЯ рдмрд┐рд╣рд╛рди рдХрд╛рдордорд╛ рдЖрдЙрдБрджрд╛, рдореИрд▓реЗ рдореЗрд░рд╛ рд╣рд╛рдХрд┐рдорд╣рд░реВрд▓рд╛рдИ рдпреА рдорд╛рдкрдирд╣рд░реВ рджреЗрдЦрд╛рдПрдБ рд░ рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ рдкрд╣реБрдБрдЪ рджрд┐рдПрдБред рддреНрдпрд╕рдкрдЫрд┐, резрек рдордзреНрдпреЗ реи рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдирдпрд╛рдБ рдорд╛рдкрдирд╣рд░реВ рдлрд┐рдЯ рдЧрд░реНрди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдпреЛ, рд░ рдпреА рджреБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╡рд┐рд╢рд╛рд▓ рдПрдХреНрд╕реЗрд▓ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЕрд╡рд╕реНрдерд┐рдд рднрдПрдХреЛрд▓реЗ, рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрд╛рджрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрдиреНрджрд╛ рдмрдвреА рдерд┐рдпреЛред
рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ .NET Core рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдкрди рдкрдирд┐ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫреБ, рддрд╛рдХрд┐ рддрдкрд╛рдИрдВрд╣рд░реВ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдЫрдиреМрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреЗрдЫред рд░ рдо рдпреЛ рдердкреНрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдо рдХрд╛рдо рдЧрд░реНрдиреЗ рдХрдореНрдкрдиреАрдорд╛, рд╣рд╛рдореА рд╕реНрдЯреНрд░рд┐рдЩ рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐ ToUpper() рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред
рдХреЛрдб:
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();
}


.NET Core 3.0 рдорд╛, рдпреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐рдХреЛ рд▓рд╛рдЧрд┐ рд▓рд╛рдн ~x2 рдЫ рд░ рдпрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд╣рд░реВрд▓рд╛рдИ рдЖрдкрд╕рдорд╛ рд╕рдиреНрддреБрд▓рдирдорд╛ рд░рд╛рдЦреНрдЫред


рддрд╣рдЧрдд рд╕рдВрдХрд▓рди
рдореЗрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реЗрдЦрдорд╛, рдореИрд▓реЗ рдпреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рд▓рд╛рдИ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реЗрдХреЛ рдерд┐рдПрдБ, рдо рдореЗрд░рд╛ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рд╕рдЪреНрдпрд╛рдЙрди рд░ рдкреВрд░рдХ рдмрдирд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБред рдЯрд╛рдпрд░реНрдб рд╕рдВрдХрд▓рдирд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рд╕рдорд╛рдзрд╛рдирдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордпрд▓рд╛рдИ рдЧрддрд┐ рджрд┐рдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдХреЛрдбрдХрд╛ рднрд╛рдЧрд╣рд░реВрд▓рд╛рдИ рдкреГрд╖реНрдарднреВрдорд┐рдорд╛ рдердк рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдиреЗ рддрдереНрдпрд▓рд╛рдИ рддреНрдпрд╛рдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдХрдо рдУрднрд░рд╣реЗрдб рд▓рд╛рдЧрдд рд▓рд╛рдЧреНрди рд╕рдХреНрдЫред NET Core 3.0 рдХреЛ рдЖрдЧрдордирд╕рдБрдЧреИ, рдЯрд╛рдпрд░реНрдб рд╕рдВрдХрд▓рди рд╕рдХреНрд╖рдо рднрдПрдХрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдШрдЯреЗрдХреЛ рдЫ рд░ рдпрд╕ рдкреНрд░рд╡рд┐рдзрд┐рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдмрдЧрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдкрд╣рд┐рд▓реЗ, рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ ASP.NET Core рдорд╛ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдПрдХреЛ рдерд┐рдпреЛ рд░ рдЯрд╛рдпрд░реНрдб рд╕рдВрдХрд▓рди рдореЛрдбрдорд╛ рдкрд╣рд┐рд▓реЛ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╕рдордпрдорд╛ рдлреНрд░рд┐рдЬрд┐рдЩ рднрдПрдХреЛ рдерд┐рдпреЛред рд╣рд╛рд▓, .NET Core 3.0 рдорд╛, рдпреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо рдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдпрд╕рд▓рд╛рдИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рдЯреЛрд▓реА рдкреНрд░рдореБрдЦ, рд╡рд░рд┐рд╖реНрда, рдордзреНрдп, рд╡рд╛ рддрдкрд╛рдИрдВ рд╡рд┐рднрд╛рдЧ рдкреНрд░рдмрдиреНрдзрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдмреБрдЭреНрдиреБрдкрд░реНрдЫ рдХрд┐ рджреНрд░реБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕рд▓реЗ рдЯреЛрд▓реАрдХреЛ рдореВрд▓реНрдп рдмрдврд╛рдЙрдБрдЫ рд░ рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕рдордп рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕рдХреЛ рд╕рдордп рджреБрд╡реИ рдмрдЪрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред
.NET рд╕реНрддрд░ рдорд╛рдерд┐
рддрдкрд╛рдИрдВрдХреЛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ / .NET рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдЧреНрд░реЗрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкреНрд░рд╛рдпрдГ, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд▓рд╛рдн рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рд░ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдердкреНрдЫред
рддрд░ рдпрд╕рдХрд╛ рдЦрд╛рд╕ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдХреЗ рдХреЗ рд╣реБрдиреН? рдЖрдЙрдиреБрд╣реЛрд╕реН, рддреАрдордзреНрдпреЗ рдХреЗрд╣реА рд╣реЗрд░реМрдВ:
- .NET Core 3.0 рд▓реЗ R2R рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ .NET Core рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдШрдЯрд╛рдЙрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред
- рд╕рдВрд╕реНрдХрд░рдг реи.реи рджреЗрдЦрд┐, рдЯрд┐рдпрд░ рдХрдореНрдкрд╛рдЗрд▓реЗрд╕рди рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫ, рдЬрд╕рдХреЛ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрди рдХрдо рд╕рдордп рдЦрд░реНрдЪ рдЧрд░реНрдиреЗрдЫрдиреНред
- рдирдпрд╛рдБ .NET рдорд╛рдирдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
- рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
- рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде, рдЖрдзрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рдЕрдиреБрдХреВрд▓рди Collection/Struct/Stream/String/Regex рд░ рдзреЗрд░реИ рдХреБрд░рд╛рд╣рд░реВрдорд╛ рд╕реБрдзрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ .NET Framework рдмрд╛рдЯ .NET Core рдорд╛ рд╕рд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдмрдХреНрд╕ рдмрд╛рд╣рд┐рд░ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдорд╛ рдареВрд▓реЛ рд╡реГрджреНрдзрд┐ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫред рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рдо .NET Core 3.0 рдорд╛ рдердкрд┐рдПрдХрд╛ рдХреЗрд╣реА рдЕрдиреБрдХреВрд▓рдирд╣рд░реВрдХреЛ рд▓рд┐рдЩреНрдХ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрджрдЫреБ:

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдХреЛрдб рд▓реЗрдЦреНрджрд╛, рддрдкрд╛рдИрдВрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдкрдХреНрд╖рд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБ рд░ рдЙрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рддрдкрд╛рдИрдВрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЙрдЪрд┐рдд рд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ .NET рдорд╛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЖрдлреНрдиреЛ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред
рд╕реНрд░реЛрдд: www.habr.com
