.NET рдХреЛрд░ рдорд╛ рдкреНрд░рджрд░реНрд╢рди
рдирдорд╕реНрддреЗ рд╕рдмреИ! рдпреЛ рд▓реЗрдЦ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрд╛ рдореЗрд░рд╛ рд╕рд╣рдХрд░реНрдореАрд╣рд░реВ рд░ рдореИрд▓реЗ рд▓рд╛рдореЛ рд╕рдордпрджреЗрдЦрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рд╕рдЩреНрдЧреНрд░рд╣ рд╣реЛред
рдореЗрд╕рд┐рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╕рдорд╛ рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362
Intel Core i5-8250U CPU 1.60GHz (Kaby Lake R), 1 CPU, 8 рддрд╛рд░реНрдХрд┐рдХ рд░ 4 рднреМрддрд┐рдХ рдХреЛрд░рд╣рд░реВ
.NET рдХреЛрд░ SDK=3.0.100
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[рд╣реЛрд╕реНрдЯ]: .NET рдХреЛрд░ 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
рдХреЛрд░: .NET рдХреЛрд░ 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
рдХрд╛рдо = рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо = рдХреЛрд░
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):
рдХреНрдпрд╛рдЪ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХреЛрдб рдмреБрдЭреНрди рдЧрд╛рд╣реНрд░реЛ рдмрдирд╛рдЙрдБрдЫ рд░ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдмрдврд╛рдЙрдБрдЫред рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдирд┐рд░реНрдорд╛рдг рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдирдЧрд░реНрдиреЗ рдХреЛрдбрдХрд╛ рддреА рд▓рд╛рдЗрдирд╣рд░реВ рдШреБрд╕рд╛рдЙрдиреБ рд╣реБрдБрджреИрди - рдпрд╕рд▓реЗ рдХреЛрдбрд▓рд╛рдИ рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрджрдЫред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпреЛ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рд▓реЛрдб рдЧрд░реНрдиреЗ рдЕрдкрд╡рд╛рджрд╣рд░реВрдХреЛ рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рдмрд░реБ рдереНрд░реЛ рдирдпрд╛рдБ рдЕрдкрд╡рд╛рдж рдирд┐рд░реНрдорд╛рдг рдорд╛рд░реНрдлрдд рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЖрдлреИрдВ рдлреНрдпрд╛рдБрдХреНрдиреБ рд╣реЛред
рдЖрд╡рд╢реНрдпрдХ рдврд╛рдБрдЪрд╛рдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреЗ рдХреЗрд╣реА рд╡рд░реНрдЧрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдлреНрдпрд╛рдБрдХрд┐рдПрдХреЛ рдЕрдкрд╡рд╛рдж рдврд┐рд▓реЛ рд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдлрд╛рд░рдо рд╡рд╛ рдХреЗрд╣рд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рд╣реБрдиреБрдкрд░реНрдЫ, рдХрд┐рди рдпрд╕рд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдирдЧрд░реНрдиреЗ?
рдпрджрд┐ рдпреЛ рдЕрд╡рд╕реНрдерд╛ рдЕрд╕рд╛рдзрд╛рд░рдг рдЫреИрди рднрдиреЗ рддрдкрд╛рдИрдВрд▓реЗ рдереНрд░реЛ рдирдпрд╛рдБ рдЕрдкрд╡рд╛рдж() рдирд┐рд░реНрдорд╛рдг рд▓реЗрдЦреНрдиреБ рд╣реБрдБрджреИрдиред рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдЩ рд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдЫ !!!
ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant
.NET рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдореЗрд░реЛ рел рд╡рд░реНрд╖рдХреЛ рдЕрдиреБрднрд╡рдорд╛, рдореИрд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩ рдорд┐рд▓реНрджреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдзреЗрд░реИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рднреЗрдЯреЗрдХреЛ рдЫреБред рдореИрд▓реЗ рдирд┐рдореНрди рддрд╕реНрд╡рд┐рд░ рдкрдирд┐ рджреЗрдЦреЗрдБ: рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрд╕рдБрдЧ рдПрдЙрдЯрд╛ рдЗрдиреНрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕рдорд╛рдзрд╛рди рдерд┐рдпреЛ, рдЬрд╕рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ рдлрд░рдХ рд░реВрдкрдорд╛ рд╕реНрдЯреНрд░рд┐рдЩ рддреБрд▓рдирд╛рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдпреЛред рддрд░ рдХреЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдПрдХреАрдХрд░рдг рдЧрд░реНрди? рд░рд┐рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ C# рдорд╛рд░реНрдлрдд CLR рдкреБрд╕реНрддрдХрдорд╛, рдореИрд▓реЗ ToUpperInvariant() рд╡рд┐рдзрд┐ ToLowerInvariant() рднрдиреНрджрд╛ рдЫрд┐рдЯреЛ рдЫ рднрдиреНрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдвреЗрдХреЛ рдЫреБред
рдкреБрд╕реНрддрдХрдмрд╛рдЯ рдЕрдВрд╢:
рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдореИрд▓реЗ рдпреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реЗрди рд░ рддреНрдпрд╕рдкрдЫрд┐ .NET рдлреНрд░реЗрдорд╡рд░реНрдХрдорд╛ рдХреЗрд╣реА рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗ рд░ рдирддрд┐рдЬрд╛рд▓реЗ рдорд▓рд╛рдИ рд╕реНрддрдмреНрдз рдмрдирд╛рдпреЛ - 15% рднрдиреНрджрд╛ рдмрдвреА рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ред рддреНрдпрд╕рдкрдЫрд┐, рднреЛрд▓рд┐рдкрд▓реНрдЯ рдмрд┐рд╣рд╛рди рдХрд╛рдордорд╛ рдЖрдЗрдкреБрдЧреЗрдкрдЫрд┐, рдореИрд▓реЗ рдпреА рдорд╛рдкрдирд╣рд░реВ рдореЗрд░рд╛ рд╡рд░рд┐рд╖реНрдард╣рд░реВрд▓рд╛рдИ рджреЗрдЦрд╛рдПрдБ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ рдкрд╣реБрдБрдЪ рджрд┐рдПрдБред рдпрд╕ рдкрдЫрд┐, 2 рдордзреНрдпреЗ 14 рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдирдпрд╛рдБ рдорд╛рдкрдирд╣рд░реВ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдпреЛ, рд░ рдпреА рджреБрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╡рд┐рд╢рд╛рд▓ рдПрдХреНрд╕реЗрд▓ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рднрдиреНрдиреЗ рдХреБрд░рд╛рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрд╛рджрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрдиреНрджрд╛ рдмрдвреА рдерд┐рдпреЛред
рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ .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 рдХреЛрд░рдорд╛ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ рд░ рдмрд╣реБ-рд╕реНрддрд░ рд╕рдВрдХрд▓рди рдореЛрдбрдорд╛ рдкрд╣рд┐рд▓реЛ рдирд┐рд░реНрдорд╛рдгрдХреЛ рд╕рдордпрдорд╛ рд╕реНрдерд┐рд░ рд╣реБрдиреНрдЫред рдпреЛ рд╣рд╛рд▓ .NET Core 3.0 рдорд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рд╕рдХреНрд╖рдо рдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдпрд╕рд▓рд╛рдИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЯреЛрд▓реА-рдиреЗрддреГрддреНрд╡, рд╡рд░рд┐рд╖реНрда, рдордзреНрдп, рд╡рд╛ рддрдкрд╛рдЗрдБ рдПрдХ рд╡рд┐рднрд╛рдЧрдХреЛ рдкреНрд░рдореБрдЦрдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓реЗ рдмреБрдЭреНрдиреБрдкрд░реНрдЫ рдХрд┐ рджреНрд░реБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╛рд╕рд▓реЗ рдЯреЛрд▓реАрдХреЛ рдореВрд▓реНрдп рдмрдврд╛рдЙрдБрдЫ рд░ рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рджреБрдмреИ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдордп рдмрдЪрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╕рдордпред
.NET рд╕реНрддрд░ рдорд╛рдерд┐
рдЖрдлреНрдиреЛ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ / .NET рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдЧреНрд░реЗрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдХреНрд╕рд░, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рднрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рд░ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдердкреНрдЫред
рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН? рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реА рд╣реЗрд░реМрдВ:
- .NET Core 3.0 рд▓реЗ R2R рдЫрд╡рд┐рд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНтАНрдпреЛ рдЬрд╕рд▓реЗ .NET рдХреЛрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдШрдЯрд╛рдЙрдиреЗрдЫред
- рд╕рдВрд╕реНрдХрд░рдг 2.2 рдХреЛ рд╕рд╛рде, рдЯрд┐рдпрд░ рд╕рдВрдХрд▓рди рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрди рдХрдо рд╕рдордп рдЦрд░реНрдЪ рдЧрд░реНрдиреЗрдЫрдиреНред
- рдирдпрд╛рдБ .NET рдорд╛рдирдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
- рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред
- рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рди, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рдЖрдзрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдХреЛ рд╕рдВрдЧреНрд░рд╣/рд╕рдВрд░рдЪрдирд╛/рд╕реНрдЯреНрд░рд┐рдо/рд╕реНрдЯреНрд░рд┐рдЩ/рд░реЗрдЬреЗрдХреНрд╕рдХреЛ рдЕрдиреБрдХреВрд▓рди рд░ рдзреЗрд░реИ рд╕реБрдзрд╛рд░ рд╣реБрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ .NET Framework рдмрд╛рдЯ .NET Core рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдмрд╛рдХрд╕ рдмрд╛рд╣рд┐рд░ рдареВрд▓реЛ рдкреНрд░рджрд░реНрд╢рди рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рдо .NET Core 3.0 рдорд╛ рдердкрд┐рдПрдХрд╛ рдХреЗрд╣реА рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╣рд░реВрдорд╛ рд▓рд┐рдЩреНрдХ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдЫреБ:
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдХреЛрдб рд▓реЗрдЦреНрджрд╛, рддрдкрд╛рдЗрдБрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкрдХреНрд╖рд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рди рд░ рддрдкрд╛рдЗрдБрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ .NET рдорд╛ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЖрдлреНрдиреЛ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБред
рд╕реНрд░реЛрдд: www.habr.com