选项的名称可以说明Visual Studio /编译器的真正含义以及真正的后果是什么?
编辑:如果你搜索谷歌,你可以找到这个地址,但这不是我真正想要的.我想知道真实的事情发生了.例如,为什么循环得到的时间更少等等.
我有三种情况来测试类的相对性能,具有继承性和结构的类.这些将用于紧密循环,因此性能很重要.Dot产品被用作2D和3D几何中的许多算法的一部分,我在实际代码上运行了分析器.以下测试表明我见过的真实世界性能问题.
通过循环和点积的应用得到的结果为1亿次
ControlA 208 ms ( class with inheritence )
ControlB 201 ms ( class with no inheritence )
ControlC 85 ms ( struct )
Run Code Online (Sandbox Code Playgroud)
测试正在运行,没有打开调试和优化.我的问题是,在这种情况下,类是什么导致它们如此缓慢?
我假设JIT仍然可以内联所有的调用,类或结构,所以实际上结果应该是相同的.请注意,如果我禁用优化,那么我的结果是相同的.
ControlA 3239
ControlB 3228
ControlC 3213
Run Code Online (Sandbox Code Playgroud)
如果重新运行测试,它们总是在彼此相差20ms内.
using System;
using System.Diagnostics;
public class PointControlA
{
public double X
{
get;
set;
}
public double Y
{
get;
set;
}
public PointControlA(double x, double y)
{
X = x;
Y = y;
}
}
public class Point3ControlA : PointControlA
{
public double …Run Code Online (Sandbox Code Playgroud) 如果我在VS中运行发布版本但附加了调试器.所以我可以设置断点并研究优化的代码反汇编.通常,为了查看所有优化,我需要在没有附加调试器的情况下运行并分离到正在运行的进程.
取消选择Visual Studio中的"抑制模块加载(仅管理)JIT优化"开关是否足以带来相同的结果?"相同的结果"我的意思是:相同(优化)的机器指令,如果没有连接调试器就启动?
我听说JIT编译器只会使用所有优化选项,如果程序集是发布版本并且没有连接调试器.现在我想知道这个开关是否可以使我的调试/检查更容易?