[解決済み] 開発者は読みやすさとパフォーマンスのどちらを優先させるべきか?[クローズド]
2023-01-21 22:42:44
質問
開発者はしばしば、ある問題を解決するために、慣用的で読みやすい方法と、直感的ではないが性能の良い方法の二者択一を迫られることがある。 たとえば、C ベースの言語では、数を 2 倍にする方法は 2 つあります。
int SimpleMultiplyBy2(int x)
{
return x * 2;
}
と
int FastMultiplyBy2(int x)
{
return x << 1;
}
最初のバージョンは技術的な読者にも非技術的な読者にも手に取りやすくなっていますが、ビットシフトは乗算よりも単純な操作なので、2番目のバージョンの方がパフォーマンスが高いかもしれません。 (とりあえず、コンパイラのオプティマイザがこれを検出して最適化することはないだろうと仮定しておきますが、それも考慮の余地があります)。
開発者として、最初の試みとしてはどちらが良いでしょうか?
どのように解決するのですか?
1つ見逃しています。
まず正しさのためにコードを書き、次に明瞭さのためにコードを書きます (もちろん、この 2 つはしばしば関連しています!)。 最後に、そして実際に必要であるという経験的な証拠がある場合にのみ、最適化を検討することができます。 早まった最適化は、本当に悪いことです。 最適化は、ほとんどの場合、時間、明快さ、保守性を犠牲にします。 それで何か価値のあるものを買っていることを確認したほうがいいでしょう。
優れたアルゴリズムは、局所的なチューニングにほとんど常に勝るということに注意してください。 正しく、明確で、高速なコードを作成できない理由はありません。 しかし、「高速」に焦点を当てることから始めると、そこに到達するのは不当に幸運なことでしょう。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 文字列の最初の文字を大文字にする(最大限のパフォーマンスを発揮する)
-
[解決済み】パフォーマンスを重視するならば、JavaのString.format()を使うべき?
-
[解決済み】 !importantはパフォーマンスに悪い?
-
[解決済み] Scalaのパターンマッチはバイトコードレベルでどのように実装されているのですか?
-
[解決済み] OFFSET / FETCH NEXTからの総行数取得
-
[解決済み] Entity Frameworkのクエリは遅いが、SqlQueryの同じSQLは速い。
-
[解決済み] translateZ(0)に対するCSSのパフォーマンス
-
[解決済み] RustのOption型のオーバーヘッドとは?
-
[解決済み] EBPフレームポインタレジスタの目的は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データベースに列挙型を保存する方法
-
[解決済み] forループの中で<と<=のどちらを使うべきか [閉じた状態].
-
[解決済み] CUDAカーネルのグリッドとブロックの寸法はどのように選択するのですか?
-
[解決済み] Scalaのパターンマッチはバイトコードレベルでどのように実装されているのですか?
-
[解決済み] ファイルキャッシュをクリアしてパフォーマンステストを繰り返す
-
[解決済み] なぜSSEスカラーsqrt(x)はrsqrt(x) * xより遅いのですか?
-
[解決済み] Entity Frameworkのクエリは遅いが、SqlQueryの同じSQLは速い。
-
[解決済み] ループのアンロールが役に立つとしたら、どんなときか?
-
[解決済み] Rでdata.frameをマージ/ジョインする最速の方法は何ですか?
-
[解決済み] EBPフレームポインタレジスタの目的は何ですか?