我正在尝试了解分析器报告,并将其用于优化我的代码。我的问题是突出显示的案例软件没有任何问题!

例如:

14.2%    public int vbar.X {get{return vbar.x;} set {vbar.x = value;}}

// time

for (int t = 2; t < 1000000; t++)
{

// main calculations
    for (int i = 2; i < 800; i++)
                    {
0.5%                 for (int j = 2; j < 800; j++)
                        {
                                vbar.X = 0.0;
34%                             vbar.Y = 0.0;
                              // some culculations for vbar.X and vbar.Y
lap.X = ((((theSpace.TheCells[i + 1, j, 0].Velocity.X - theSpace.TheCells[i, j, 0].Velocity.X) / theSpace.TheCells[i + 1, j, 0].Nondx) - ((theSpace.TheCells[i, j, 0].Velocity.X - theSpace.TheCells[i - 1, j, 0].Velocity.X) / theSpace.TheCells[i, j, 0].Nondx)) * (2 / (theSpace.TheCells[i + 1, j, 0].Nondx + theSpace.TheCells[i, j, 0].Nondx)))
                                            + (((theSpace.TheCells[i, j + 1, 0].Velocity.X - theSpace.TheCells[i, j, 0].Velocity.X) / theSpace.TheCells[i, j + 1, 0].Nondy) - ((theSpace.TheCells[i, j, 0].Velocity.X - theSpace.TheCells[i, j - 1, 0].Velocity.X) / theSpace.TheCells[i, j, 0].Nondy)) * (2 / (theSpace.TheCells[i, j + 1, 0].Nondy + theSpace.TheCells[i, j, 0].Nondy));
                                        vbar.X = theSpace.TheCells[i, j, 0].Velocity.X - theSpace.Dt * (adv.X - Math.Sqrt(slnParameter.Pr / slnParameter.Ra) * lap.X);

lap.Y = ((((theSpace.TheCells[i + 1, j, 0].Velocity.Y - theSpace.TheCells[i, j, 0].Velocity.Y) / theSpace.TheCells[i + 1, j, 0].Nondx) - ((theSpace.TheCells[i, j, 0].Velocity.Y - theSpace.TheCells[i - 1, j, 0].Velocity.Y) / theSpace.TheCells[i, j, 0].Nondx)) * (2 / (theSpace.TheCells[i + 1, j, 0].Nondx + theSpace.TheCells[i, j, 0].Nondx)))
                                            + (((theSpace.TheCells[i, j + 1, 0].Velocity.Y - theSpace.TheCells[i, j, 0].Velocity.Y) / theSpace.TheCells[i, j + 1, 0].Nondy) - ((theSpace.TheCells[i, j, 0].Velocity.Y - theSpace.TheCells[i, j - 1, 0].Velocity.Y) / theSpace.TheCells[i, j, 0].Nondy)) * (2 / (theSpace.TheCells[i, j + 1, 0].Nondy + theSpace.TheCells[i, j, 0].Nondy));
                                        vbar.Y = theSpace.TheCells[i, j, 0].Velocity.Y - theSpace.Dt * (adv.Y - Math.Sqrt(slnParameter.Pr / slnParameter.Ra) * lap.Y - theSpace.TheCells[i, j, 0].Temperature);


                        }
                   }
}


...
基于此示例,我的代码在以下几行中存在问题:
所有这些变量都是整数:
vbar.X = 0.0int j = 2j++
。如您在第二张图片中所见。

我应该如何解决这些问题?或这些循环的哪一部分有问题?
对包含39%包含时间的这部分代码(vbar.X = 0.0)进行编码的另一种方式是什么?
有趣的是,通过探查器获取结果所需的时间仅为代码运行所需时间的一半!




///////////////////////////////////////////////////// ///////////////////////////////////////////////////// //

我找到了部分问题的答案。
关于这部分(vbar.X = 0.0),这是不正确的,因为我可以将其放在循环之外,并避免在每次迭代中都重复。

///////////////////////////////////////////////////// ///////////////////////////////////////////////////// //

最佳答案

这可能是分析器的源代码行突出显示功能不准确的表现。如果可能的话,我会尝试在Visual Studio "14" preview中对其进行修复,因为我们最近对此领域进行了一些改进。

就是说,在发布模式下,由于可能发生的优化,尤其是对于.NET代码,源代码行映射不是100%准确的。通常,如果突出显示的行与调用树视图所说的不一致,则最好使用调用树。

07-24 09:37