1

実行に時間がかかるコードがある場合、反復ごとに結果を出力すると、プログラムの速度が大幅に低下します。コードの進行状況を確認するために時折出力を受け取るには、次のようにする必要があります。

if (i % 10000 == 0) {
    # print progress here
}

毎回チェックするifステートメントはそれをまったく遅くしますか?出力を入れずに待つだけでいいのですが、それでかなり速くなりますか?

また、実行する方が速いですか:(i % 10000 == 0)または(i == 10000)
等式または弾性率のチェックは高速ですか?

4

1 に答える 1

1

一般的には、それはまったく問題ではありません。

少し長い答え:ループが何百万回も実行され、その中の他のステートメントが実際にはifステートメントよりも要求が少ない場合を除いて、問題はありません(たとえば、単純な乗算など)。その場合、パフォーマンスがわずかに低下する可能性があります。

(i % 10000 == 0)vs.に関して(i == 10000)は、後者は比較するだけなので明らかに高速ですが、前者の可能性は(かなりコストのかかる)モジュラスと比較を行います。

とは言うものの、ループがプログラムの実行時間の90%を占めていなければ、ifステートメントとモジュラスカウントの両方に違いはありません。これは通常、学校でのみ当てはまります:)。おそらく、何も印刷しないことで節約できるよりも、この質問をすることで多くの時間を費やしたでしょう。開発とデバッグの場合、これは悪い方法ではありません。

この種の決定の黄金律:

想像できる最も読みやすく明示的なコードを記述して、実行したいことを実行します。パフォーマンスに問題がある場合は、最初に間違ったデータ構造とアルゴリズムの選択を調べてください。これらすべてを実行し、非常に迅速なプログラムが必要な場合は、プロファイルを作成して、どの部分に最も時間がかかるかを確認してください。これらすべての後、この種の低レベルの推測を行うことができます。

于 2013-01-19T15:32:30.797 に答える