会有之间巨大的性能差异:

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);

VS

for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
    this.listBoxColumns.SetSelected(i, this.chkSelectAll.Checked);

哪一个是可取的。简明编码与性能增益?

有帮助吗?

解决方案

我不希望看到太多性能上的差异,我肯定会用后者去,因为它更具有可读性。 (我把括号轮它虽然。)

这是很容易想象一个情况下,你可能需要更改循环,并与第一例子中,你可能会意外地只改变他们,而不是两者之一。如果你的真正的要避免调用Checked酒店的每一次迭代中,你总是可以做:

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

与以往一样,先写最可读代码,和弯曲设计/代码变了形为的性能起见前措施/配置文件的任何性能差异。

其他提示

我想的性能差异将是几乎没有明显的。然而这里的变化既高效和高度可读:

bool isChecked = this.chkSelectAll.Checked;
for (int i = 0; i < this.listBoxColumns.Items.Count; i++) {
    this.listBoxColumns.SetSelected(i, isChecked);
}

如果您之后您还需要注意访问“this.listBoxColumns”两次,每次迭代的开销是否存在摆在首位,是值得关注的一些真正的优化是。这就是分析是。

您必须在第一个例子中的额外的布尔检查。不过话说回来,我无法想象的性能差异会比可以忽略不计的任何其他。您是否尝试过在您的特定情况衡量呢?

在第二个例子是优选的,因为你不重复循环代码。

我看不到有作为两者之间的显著的性能差异。的方式进行确认。将超过迭代1000设置一个基准和时间不同的算法。

然而,因为它的UI代码的性能提升是毫无意义的,你将要等待用户阅读对话,并决定下一步该怎么做。

我个人会去每一次的第二种方法。你只得到了一个循环来维持,并且代码更清晰。

的任何性能差异可以忽略不计。

您主要关注应该代码可读性和可维护性。

微的优化像这样的往往不是,错位。被关注的性能之前,始终轮廓。

这是最容易被忽略的。更重要的是,我觉得有必要引述如下:

  

“过早的优化是所有罪恶的根源”

二是容易的可读性,所以干脆与去,除非你后来发现需要优化(这是不太可能在我看来)。

为什么不使用System.Diagnostics.StopWatch和比较两个自己呢?不过,我不相信有将是任何真正的性能差异。第一个例子可能会更快,因为你只访问一次chkSelectAll.Checked。两者都是容易可读虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top