C# 为什么在使用泛型包装器类时添加1000000个浮点更快?
我有一个简单的类,它提供独立于数值类型的数学运算。为了简化我的问题,我将我的课程缩减为以下内容:C# 为什么在使用泛型包装器类时添加1000000个浮点更快?,c#,performance,generics,add,C#,Performance,Generics,Add,我有一个简单的类,它提供独立于数值类型的数学运算。为了简化我的问题,我将我的课程缩减为以下内容: public abstract class MathProvider<T> { public abstract T Add(T a, T b); } public class FloatMathProvider : MathProvider<float> { public override float Add(float a, float b) {
public abstract class MathProvider<T>
{
public abstract T Add(T a, T b);
}
public class FloatMathProvider : MathProvider<float>
{
public override float Add(float a, float b)
{
return a + b;
}
}
以下是释放模式下的输出示例:
float: 10182
Provider: 1560
在调试模式下:
float: 38717
Provider: 13127
这似乎违背了直觉。有人能解释一下为什么通过泛型包装类进行加法更快吗?此外,当封装在泛型类中时,通常还有哪些操作更快?喝点咖啡,在测试中,您已将
秒表提供程序
替换为秒表本机
。实际结果是相反的:正如您预期的那样,数学提供程序的速度较慢。您不是刚刚交换了秒表,或者这是一个打字错误吗?stopwatch_native似乎正在测量mathProvider,stopwatch_mathProvider正在测量本机添加。调试模式下的性能测量是无趣的;在调试模式下,优化器的攻击性要小得多。我希望您不是在调试CLR知道的调试程序中进行测试!它可以对程序进行去优化,以帮助调试器中的用户。这篇文章将在我的余生中困扰我(谢谢你的帮助。@Eric你应该更依赖你的直觉:)
float: 38717
Provider: 13127