循环中的性能差异

Ras*_*dit 0 loops c#-2.0

两者之间是否存在巨大的性能差异:

if (this.chkSelectAll.Checked)
    for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
        this.listBoxColumns.SetSelected(i, true);
else
    for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
        this.listBoxColumns.SetSelected(i, false);
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
    this.listBoxColumns.SetSelected(i, this.chkSelectAll.Checked);
Run Code Online (Sandbox Code Playgroud)

哪一个是可取的.简洁的编码与性能提升?

Jon*_*eet 10

我不希望看到太多的性能差异,我肯定会选择后者,因为它更具可读性.(虽然我会把它括起来.)

很容易想象您可能需要更改循环的情况,并且在第一个示例中,您可能会意外地仅更改其中一个而不是两者.如果你真的想避免Checked在每次迭代中调用属性,你总是可以这样做:

bool checked = this.chkSelectAll.Checked;
for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
{
    this.listBoxColumns.SetSelected(i, checked);
}
Run Code Online (Sandbox Code Playgroud)

与以往一样,首先编写最易读的代码,并在为了性能而将设计/代码弯曲变形之前测量/分析任何性能差异.