C#7.3 in this ValueTuple が速い
C#7.3でこんなベンチマークをしました。 in this ValueTuple の組み合わせが出来ると本当に高速です。
[Benchmark] public void DoubleMaxLegacy() { for(int idx=0 ; idx<10000;idx++) result[idx] = Math.Max((double)(10000 - idx), (double)idx); } [Benchmark] public void DoubleMaxNew() { for(int idx=0 ; idx<10000;idx++) result[idx] = ((double)(10000 - idx), (double)idx).Max(); } // 新しいMaxはこちら。演算内容はMath.Max()と全く同じです。 public static double Max(in this ValueTuple<double, double> value) { return value.Item1 > value.Item2 || double.IsNaN(value.Item1) ? value.Item1 : value.Item2; }
こちらが結果です。Meanを見ると分かりますが、2倍近く高速です。侮れません。
Method | Mean | Error | StdDev |
DoubleMaxLegacy | 28,950.1 ns | 158.509 ns | 148.269 ns |
DoubleMaxNew | 15,761.9 ns | 113.574 ns | 106.237 ns |
暗黙のキャストができない以外は極めて優秀です。 ベンチマークは BenchmarkDotNet を使っています。
#this は速度に関係あるのかって?多分ないです。こう書きたかったから。