我创建了一个使用回溯算法解决数独谜题的程序。为此,我创建了一个名为Tile的类,其中包含一个构造函数,该构造函数接受一个布尔标记,表示该区块是否打开以供用户输入。
/// <summary>
/// Represents a single tile in a sudoku board
/// </summary>
public class Tile
{
public int Row { get; set; }
public int Column { get; set; }
public int Box { get; set; }
public int Value { get; set; }
public bool ReadOnly { get; private set; }
public Tile(bool @readonly = false)
{
this.ReadOnly = @readonly;
}
}
传入以下数独板需要0.03秒才能解决
{ 0, 0, 6, 0, 0, 8, 0, 9, 0 },
{ 0, 0, 3, 6, 9, 0, 0, 0, 5 },
{ 0, 0, 7, 0, 0, 4, 0, 3, 0 },
{ 0, 9, 0, 0, 0, 0, 0, 4, 0 },
{ 0, 0, 8, 0, 3, 0, 1, 0, 0 },
{ 0, 6, 0, 0, 0, 0, 0, 7, 0 },
{ 0, 1, 0, 8, 0, 0, 3, 0, 0 },
{ 4, 0, 0, 0, 6, 1, 9, 0, 0 },
{ 0, 7, 0, 2, 0, 0, 6, 0, 0 },
但是如果我改变Tile.ReadOnly属性或构造函数参数的名称以使它们不匹配(例如:prop'ReadOnly'和param'ro')那么解决同一块板需要8.63秒!
这是怎么回事?为什么变量的名称会对程序产生如此重大的影响?这是否与如何从C#转换为CIL有关?我看了两个组件,看起来以下几行是唯一不同的
public Tile(bool @readonly = false)
012E254A in al,dx
VS
public Tile(bool ro = false)
00822548 push ebp
00822549 mov ebp,esp
这些差异有什么意义吗? 完整源代码here。