質問
との間に大きなパフォーマンスの違いはあるのでしょう
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);
対ます。
for (int i = 0; i < this.listBoxColumns.Items.Count; i++)
this.listBoxColumns.SetSelected(i, this.chkSelectAll.Checked);
どちらがお勧めです。パフォーマンスゲイン対簡潔なコーディング?
解決
私は多くのパフォーマンスの違いを見て期待していない、そしてそれをより読みだと私は確かに後者で行くと思います。 (私もそれ丸い括弧を置くと思います。)
それはあなたがループを変更する必要があるかもしれない状況を想像するのは非常に簡単だし、最初の例と誤っだけの代わりに、両方のそれらの1つを変更することがあります。あなたがをした場合、本当には反復ごとに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」にアクセスのオーバーヘッドが最初の場所に存在し、に注意を払う価値があるかどうかに注意を払うことになるでしょう。これは、プロファイリングが何のためにあるのかだ。
あなたは最初の例では、余分なブールチェックを持っています。しかし、私はパフォーマンスの差は無視できる以外のものになることを想像できない、と述べました。あなたの特定のシナリオでこれを測定しようとしたことがありますか?
は、ループ・コードを繰り返していないので、第二の例であることが好ましい。
私は2つの間に有意なパフォーマンスの違いであることが見ることができません。それを確認する方法は、繰り返しの1000上でベンチマークと時間の異なるアルゴリズムを設定することです。
ユーザーダイアログを読み、次に何をすべきかを決定するのを待つこととしているように、しかし、それはUIのコードだとして任意のパフォーマンスの向上はかなり無意味です。
個人的に私は、第二のアプローチ毎回のために行くと思います。あなたは維持するための一つのループのみを持っている、とコードが明確である。
任意のパフォーマンスの違いは無視されます。
あなたの主な関心事は、コードの可読性と保守性である必要があります。
このようなマイクロ最適化は、より多くの場合より見当違いです。常にパフォーマンスに関係される前に、プロフィールます。
これは無視できない可能性が最も高いです。さらに重要なことは、しかし、私は次のように引用する必要性を感じます:
二つ目は、後で(私の意見ではかなりそうである)を最適化する必要性を見つけない限り、単に、それで行く、簡単に読みやすくています。
なぜSystem.Diagnostics.StopWatchを使用して2自分を比較しますか?しかし、私は、任意の実際のパフォーマンスの違いがあるように起こっているとは思いません。あなたは一度だけchkSelectAll.Checkedにアクセスしているので、最初の例では、より高速であるかもしれません。どちらも、しかし読みやすいです。