Frage

Wird es eine große Performance-Unterschied zwischen:

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

Welches ist ratsam. Concise Codierung gegen Performance-Gewinn?

War es hilfreich?

Lösung

Ich würde nicht erwarten, dass viel Unterschied in der Leistung zu sehen, und ich würde auf jeden Fall mit diesem gehen, wie es besser lesbar ist. (Ich würde allerdings Klammern Runde es ausdrückte.)

Es ist ziemlich einfach, eine Situation vorzustellen, in dem Sie die Schleife ändern können müssen, und mit dem ersten Beispiel könnten Sie versehentlich eine von ihnen nur statt beides ändern. Wenn Sie wirklich vermeiden wollen, in jeder Iteration die Checked Eigenschaft aufrufen, können Sie immer tun:

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

Wie immer schreibt die meist lesbaren Codes zuerst, und Mess- / Profil keine Leistungsunterschiede vor Ihrem Design / Code aus der Form aus Gründen der Performance Biege.

Andere Tipps

Ich nehme an, der Performance-Unterschied kaum spürbar sein wird. Aber hier ist eine Variante, die sowohl effizient und sehr gut lesbar ist:

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

Wenn Sie nach einigen echten Optimierung Sie auch darauf achten, werden Sie wollen, ob die Overhead „this.listBoxColumns“ zweimal bei jeder Iteration des Zugriffs auf in erster Linie vorhanden ist, und lohnt sich die Aufmerksamkeit auf die Zahlung. Das ist, was Profilierung ist.

Sie haben eine zusätzliche boolean Prüfung im ersten Beispiel. Aber gesagt haben, dass ich kann mir nicht vorstellen, dass der Unterschied in der Leistung alles andere als vernachlässigbar ist. Haben Sie versucht, dies in Ihrem speziellen Szenario messen?

Das zweite Beispiel ist vorzuziehen, da Sie nicht die Schleife Code wiederholen.

Ich kann es sehen eine signifikante Performance-Unterschied zwischen den beiden zu sein. Die Art und Weise, um zu bestätigen es eine Benchmark und Zeit, um die verschiedenen Algorithmen über 1000s Iterationen einzurichten wäre.

Jedoch da es UI-Code jeder Performance-Gewinn ziemlich sinnlos ist, wie Sie für den Benutzer zu warten, werden den Dialog zu lesen und entscheiden, was als nächstes zu tun.

Persönlich würde ich für den zweiten Ansatz gehe jedes Mal. Du hast nur eine Schleife zu halten, und der Code ist klarer.

Jeder möglicher Performance-Unterschied vernachlässigbar sein.

Ihr Hauptanliegen sollte Code Lesbarkeit und Wartbarkeit sein.

Micro-Optimierungen wie diese sind mehr als oft nicht, fehl am Platz. Immer Profil, bevor sie mit Leistung besorgt werden.

Es ist sehr wahrscheinlich vernachlässigbar. Noch wichtiger ist jedoch, fühle ich die Notwendigkeit, die folgende zu zitieren:

  

„Vorzeitige Optimierung ist die Wurzel aller Übel“

Die zweite ist einfach das besser lesbar, so einfach mit dem gehen, es sei denn, Sie später eine Notwendigkeit für Sie zu optimieren (was meiner Meinung nach sehr unwahrscheinlich ist).

Warum System.Diagnostics.Stopwatch nicht und vergleichen Sie die beiden sich selbst? Aber ich glaube nicht, dass es kein wirklicher Unterschied in der Leistung sein wird. Das erste Beispiel könnte schneller sein, weil Sie nur chkSelectAll.Checked einmal zugreifen. Beide sind zwar gut lesbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top