我在实现无分配 Linq 时遇到了有趣的案例。当我稍微更改代码时,基准测试时间突然增加,我认为更改是微不足道的。我将范围缩小到这个测试代码:
[Benchmark]
public int ComparingGenericArgument1()
{
var comparer = new Wrap<int>(Comparer<int>.Default);
return CompareSum<Wrap<int>>.Calc(10000, comparer);
}
[Benchmark]
public int ComparingGenericArgument2()
{
var comparer = new Wrap<int, Comparer<int>>(Comparer<int>.Default);
return CompareSum<Wrap<int, Comparer<int>>>.Calc(10000, comparer);
}
static class CompareSum<TComparer> where TComparer : struct, IComparer<int>
{
public static int Calc(int count, TComparer comparer)
{
int sum = 0;
for (int i = 0; i < count; ++i)
for (int j = 0; j < count; ++j)
sum += comparer.Compare(i, j);
return sum;
}
} …Run Code Online (Sandbox Code Playgroud)