Как стать автором
Обновить
0
0

Программист

Отправить сообщение
Не улучшается — проверял перед тем как послал.
Ваш код немного отличается от заявленного Makeman.
У вас в хелперах:
public static T With<T>(this T o, params object[] pattern) => o;

Что приводит к боксингу int'а в
.With(
    p.Name = _name,
    p.Age = _age
    );

В то время как у Makeman эти хелперы объявлены так, что боксинга не будет:
 public static T With<T>(this T o) => o;
 public static T With<T, A>(this T o, A a) => o;
 public static T With<T, A, B>(this T o, A a, B b) => o;
 public static T With<T, A, B, C>(this T o, A a, B b, C c) => o;

Чтобы не быть голословным, на моей машине бенчмарк вашего кода

BenchmarkDotNet=v0.10.14, OS=Windows 7 SP1 (6.1.7601.0)
Intel Xeon CPU X5670 2.93GHz, 1 CPU, 12 logical and 6 physical cores
Frequency=2864628 Hz, Resolution=349.0855 ns, Timer=TSC
[Host] : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2563.0
DefaultJob : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2563.0

Method | Mean | Error | StdDev |
-------- |----------:|----------:|----------:|
With | 21.618 ns | 0.5293 ns | 0.4692 ns |
Without | 5.212 ns | 0.2985 ns | 0.2931 ns |

Разница действительно больше чем в четыре раза.
Бенчмарка кода c поправленными хелперами:

BenchmarkDotNet=v0.10.14, OS=Windows 7 SP1 (6.1.7601.0)
Intel Xeon CPU X5670 2.93GHz, 1 CPU, 12 logical and 6 physical cores
Frequency=2864628 Hz, Resolution=349.0855 ns, Timer=TSC
[Host] : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2563.0
DefaultJob : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2563.0

Method | Mean | Error | StdDev |
-------- |---------:|----------:|----------:|
With | 9.931 ns | 0.2884 ns | 0.4042 ns |
Without | 5.341 ns | 0.1552 ns | 0.1376 ns |

Разница уже не в 4, а примерно в два раза. Имхо, все равно достаточно большая.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность