Ваш код немного отличается от заявленного 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;
Чтобы не быть голословным, на моей машине бенчмарк вашего кода
У вас в хелперах:
Что приводит к боксингу int'а в
В то время как у Makeman эти хелперы объявлены так, что боксинга не будет:
Чтобы не быть голословным, на моей машине бенчмарк вашего кода
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, а примерно в два раза. Имхо, все равно достаточно большая.