Будет ли динамическое ключевое слово в поле C# типы значений?C#

Место общения программистов C#
Ответить
Anonymous
 Будет ли динамическое ключевое слово в поле C# типы значений?

Сообщение Anonymous »

Я стажер, и сейчас работаю над проектом. Этот проект является MVC 4.8, и использует версию EF 6.
В этом проекте они использовали метод с именем Dynamic GetSystessetting (String Paramcode, String Paramtype) . Он содержит (int, float, bool, string, guid) значения. Это один из наиболее используемых методов в приложении. < /P>
Я знаю, что динамика плохая. Мне нужно больше контекста < /p>
Эта функция, < /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;

}

Guidevalue, StringValue, NumericValue, Bitvalue - это столбцы в DB.
Вот что я сделал
Я сравнил с динамическим ключевым словом, и я наблюдал, как виды стоимости становятся коробными и объединенными памятью на целом. Поэтому мне нужно разъяснить, была ли это хорошей реализацией, и я также хочу знать, что мой эталон имеет смысл.

Код: Выделить всё

using BenchmarkDotNet.Attributes;

namespace 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);
}
}

Результаты выглядят как (фактические),
// * summary *
Benchmarkdotnet v0.13.7, Windows 11 (10.0.22631.5699)
Phileby Gen Core I3-1115G4 3,00GHCHGHGHGHGHGHGHGHCH-z. 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 < /p> p> div 2

div Div2 < /p> div 2

div Div2 < /p> div 2

div Div. class = "s-table-container">


method < /th>
mean < /th>
4.0551 ns < /td>
0.0076 < /td>
0.5383 ns
-
-


GetGuidValue
4,6831 ns < /td>
0,1457 ns < /td>
0,2181 ns < /td>
4.66 ns < /td>
0.0102 < /td>
32 b < /td>
< /tr>

getGuidValeExplicit Справа; "> 0,9470 нс < /td>
0,0466 NS < /td>
0,0573 ns < /td>
-
-



Also I decompiled the code with IL Viewer in Rider and it looks like,
[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>
Я хотел знать, является ли эта вспомогательная функция хорошей практикой или значительно плохой. Это было на самом деле на EF 6 (не EF Core).
Не могли бы вы объяснить мне об этом динамическом использовании и о том, как оно влияет на приложение во время выполнения и когда дело доходит до пута.

Подробнее здесь: https://stackoverflow.com/questions/797 ... alue-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»