Код: Выделить всё
dynamic GetSystemSetting(string paramCode, string paramType)
< /code>
Он содержит значения int, float, bool, string и guid. Это один из самых используемых методов в приложении. Я знаю, что динамика плохая. Мне нужно больше контекста. Эта функция: < /p>
public dynamic GetSystemSetting(string paramCode, string paramType)
{
dynamic result = "";
// Code implementation here
switch(paramType)
{
case "B":
result = _dataService.Get(paramCode).BitValue;
break;
case "S":
result = _dataService.Get(paramCode).StringValue;
break;
case "N":
result = _dataService.Get(paramCode).NumericValue;
break;
case "G":
result = _dataService.Get(paramCode).GuidValue;
break;
}
return result;
}
< /code>
GuidValuenamespace Benchmark_EfCore.Benchmarks;
[MemoryDiagnoser]
public class DynamicBenchmark
{
private List IntList { get; set; } = new List();
private List GuidList { get; set; } = new List();
[GlobalCleanup]
public void GlobalSetup()
{
IntList = Enumerable.Range(0, 100).ToList();
for (var i = 0; i < IntList.Count; i++)
{
GuidList .Add(Guid.Empty);
}
}
[Benchmark]
public dynamic GetIntValue()
{
return IntList.Find(a => a == 50);
}
[Benchmark]
public int GetValueExplicit()
{
return IntList.Find(a => a == 50);
}
[Benchmark]
public dynamic GetGuidValue()
{
return GuidList.Find(a => a == Guid.Empty);
}
[Benchmark]
public Guid GetGuidValueExplicit()
{
return GuidList.Find(a => a == Guid.Empty);
}
}
< /code>
The results:
BenchmarkDotNet v0.13.7, Windows 11 (10.0.22631.5699)
11th Gen Intel Core i3-1115G4 3.00GHz, 1 CPU, 4 logical and 2 physical cores
.NET SDK 8.0.404
[Host] : .NET 8.0.17 (8.0.1725.26602), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.17 (8.0.1725.26602), X64 RyuJIT AVX2
< /code>
method < /th>
означает < /th>
4.0551 ns < /td>
0,0076 < /td>
24 b < /td>
< /tr>
getValueExplicit < /td>
0,5986 ns < /td>
0,0664 ns < /td>
0,9470 нс < /td>
0,0466 NS < /td>
0,0573 ns < /td>
-
-
Я разбил код с помощью IL Viewer в jetbrains Rider:
.[Benchmark(22, "D:\\Benchmark_EfCore\\Benchmarks\\DynamicBenchmark.cs")]
[return: Dynamic]
public object GetIntValue()
{
return (object) this.IntList.Find(DynamicBenchmark.c.9__9_0 ?? (DynamicBenchmark.c.9__9_0 = new Predicate((object) DynamicBenchmark.c.9, __methodptr(b__9_0))));
}
[Benchmark(28, "D:\\Benchmark_EfCore\\Benchmarks\\DynamicBenchmark.cs")]
public int GetValueExplicit()
{
return this.IntList.Find(DynamicBenchmark.c.9__10_0 ?? (DynamicBenchmark.c.9__10_0 = new Predicate((object) DynamicBenchmark.c.9, __methodptr(b__10_0))));
}
< /code>
Is that helper function good practice? It was on Entity Framework 6 (not Entity Framework Core). Please explain this dynamic usage and how it affects the application at runtime and through put.
Подробнее здесь: https://stackoverflow.com/questions/797 ... alue-types
Мобильная версия