Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在使用泛型包装器类时添加1000000个浮点更快?_C#_Performance_Generics_Add - Fatal编程技术网

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