C# 将常数指定给变量会导致2个负载?
这是在C#中完成的,使用的分析器是英特尔Vtune。在版本配置中编译的代码。 以下代码行:C# 将常数指定给变量会导致2个负载?,c#,.net,performance,profiling,C#,.net,Performance,Profiling,这是在C#中完成的,使用的分析器是英特尔Vtune。在版本配置中编译的代码。 以下代码行: _smalestRangeSq = float.MaxValue; 其中_smalestRangeSq是一个类字段,结果如下 movss xmm0, dword ptr [rip+0x9ee] movss dword ptr [rsi+0x58], xmm0 而且很明显,它会消耗大量的时间在商店里表演。有人能给我解释一下原因吗?应用程序的大部分时间都花在哪里了?看
_smalestRangeSq = float.MaxValue;
其中_smalestRangeSq是一个类字段,结果如下
movss xmm0, dword ptr [rip+0x9ee]
movss dword ptr [rsi+0x58], xmm0
而且很明显,它会消耗大量的时间在商店里表演。有人能给我解释一下原因吗?应用程序的大部分时间都花在哪里了?看起来x86 JIT做得更好:
mov dword ptr ds:[0EFCC24h],7F7FFFFFh
登录值类型通常会创建对象的新副本并将其签名到操作数。运算符的右边是变量或常量时没有区别。@mehrdadsaf如果您的语句为false,则按原样使用const
字段中的值,这与静态只读
字段非常不同float.MaxValue
是const
,它的用法与直接在源代码中编写(float)3.40282346638528859e+38
的用法相同。它真的是应用程序花费大部分时间的地方吗?看起来x86 JIT做得更好:mov dword ptr ds:[0EFCC24h],7F7FFFFFh
登录值类型通常创建对象的新副本并将其签名到操作数。运算符的右边是变量或常量时没有区别。@mehrdadsaf如果您的语句为false,则按原样使用const
字段中的值,这与静态只读
字段非常不同float.MaxValue
是const
,其用法与直接在源代码中编写(float)3.40282346638528859e+38
相同。