我正在尝试了解分析器报告,并将其用于优化我的代码。我的问题是突出显示的案例软件没有任何问题!
例如:
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.0
,int j = 2
和j++
。如您在第二张图片中所见。
我应该如何解决这些问题?或这些循环的哪一部分有问题?
对包含39%包含时间的这部分代码(
vbar.X = 0.0
)进行编码的另一种方式是什么?有趣的是,通过探查器获取结果所需的时间仅为代码运行所需时间的一半!
///////////////////////////////////////////////////// ///////////////////////////////////////////////////// //
我找到了部分问题的答案。
关于这部分(
vbar.X = 0.0
),这是不正确的,因为我可以将其放在循环之外,并避免在每次迭代中都重复。///////////////////////////////////////////////////// ///////////////////////////////////////////////////// //
最佳答案
这可能是分析器的源代码行突出显示功能不准确的表现。如果可能的话,我会尝试在Visual Studio "14" preview中对其进行修复,因为我们最近对此领域进行了一些改进。
就是说,在发布模式下,由于可能发生的优化,尤其是对于.NET代码,源代码行映射不是100%准确的。通常,如果突出显示的行与调用树视图所说的不一致,则最好使用调用树。