.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 Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
рдХреЛрд░: .NET Core 2.2.7 (CoreCLR 4.6.28008.02, CoreFX 4.6.28008.03), 64bit RyuJIT
[рд╣реЛрд╕реНрдЯ]: .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
рдХреЛрд░: .NET Core 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 рд╡рд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛:
рдлреЗрдХрдгреЗ
рдПрдХ рд╡рд░реНрд╖рд╛рдкреВрд░реНрд╡реА, рдореА рдПрдХрд╛ рдХрдВрдкрдиреАрдд рд▓реЗрдЧрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╡рд░ рдХрд╛рдо рдХреЗрд▓реЗ рд╣реЛрддреЗ, рддреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдЯреНрд░рд╛рдп-рдХреЕрдЪ-рдереНрд░реЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрджреНрд╡рд╛рд░реЗ рдлреАрд▓реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддреЗ. рдорд▓рд╛ рдЖрдзреАрдЪ рд╕рдордЬрд▓реЗ рд╣реЛрддреЗ рдХреА рд╣реЗ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА рдЕрд╕реНрд╡рд╕реНрде рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЬреЗрд╡реНрд╣рд╛ рд╢рдХреНрдп рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдореА рдЕрд╢рд╛ рдбрд┐рдЭрд╛рдЗрдирдЪрд╛ рд╡рд╛рдкрд░ рди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рдкрд░рдВрддреБ рдЕрд╢рд╛ рдмрд╛рдВрдзрдХрд╛рдорд╛рд╕рд╣ рддреНрд░реБрдЯреА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдЪрд╛ рджреГрд╖реНрдЯреАрдХреЛрди рдХрд╛ рд╡рд╛рдИрдЯ рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВрдпрд╛. рдореА рджреЛрди рдкрдзреНрджрддреАрдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реНрдпрд╛рдпрд╛рд╕рд╛рдареА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╡рд▓реЗ.
рдХреЛрдб:
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