問題タブ [premature-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - .Netコードで文字列を手動でインターンするのはいつ良い考えですか?
参照はここにあります:http: //msdn.microsoft.com/en-us/library/system.string.intern.aspx
これはコンパイラによって自動的に行われることが多いようですが、手動で行うこともできます。私が間違っている場合は私を訂正し、これにもう少し光を当ててください。言語がC#、VB.Net、C ++ / CLI、その他であるかどうかは重要ですか?
ありがとう。
c - Cでより効率的なビット操作方法はどれですか?
私が得た答えに基づいて、この問題は無意味だと思います。親切な返信ありがとうございます。
右端のjビットが1、その他が0の2進数を取得したいのですが、基本的には2つの方法があります。どちらがより効率的か知りたいですか、またはこれら2つよりも効率的な方法はありますか?
optimization - このLua最適化ハックがパフォーマンスを向上させるのはなぜですか?
Luaスクリプトコードのパフォーマンスを向上させるためのさまざまなテクニックを説明しているドキュメントを探していますが、そのようなトリックが必要になることにショックを受けました。(私はLuaを引用していますが、Javascriptで同様のハッキングを見てきました)。
この最適化が必要な理由:
たとえば、コード
これよりも30%遅く実行されます:
sin
それらはローカルで関数を再宣言しています。
なぜこれが役立つのでしょうか?とにかくそれを行うのはコンパイラの仕事です。なぜプログラマーはコンパイラーの仕事をしなければならないのですか?
私はJavascriptで同様のことを見てきました。したがって、明らかに、解釈コンパイラがその仕事をしていないという非常に正当な理由があるに違いありません。それは何ですか?
私がいじっているLua環境でそれを繰り返し見ます。変数をローカルとして再宣言する人々:
人々がコンパイラの仕事をしなければならないということは、ここで何が起こっているのでしょうか?コンパイラは検索方法に混乱していますformat
か?なぜこれはプログラマーが対処しなければならない問題なのですか?なぜこれは1993年に処理されなかったのでしょうか?
私も論理的なパラドックスにぶつかったようです。
- プロファイリングなしで最適化を行うべきではありません
- ルアにはプロファイリングする能力がありません
- Luaは最適化されるべきではありません
java - ステートメントまたは三項演算子のどちらの「if」構文が高速ですか?
if
javaには、classic:if {} else {}
とshorthand:の2種類のステートメントがありますexp ? value1 : value2
。一方が他方よりも速いですか、それとも同じですか?
声明:
三項演算子:
java - ++ iは、Javaのforループでi ++よりも本当に高速ですか?
Javaでは、通常、次のようなforループを作成します。
しかし最近、同僚がそれを次のように入力しました。
彼は後者の方が速いだろうと言った。本当?
c# - 最適化が時期尚早なのはいつですか?
この用語はよく使われていますが、ほとんどの人が怠惰や無知から使っているように感じます。たとえば、私はこの記事を読んでいました:
http://blogs.msdn.com/b/ricom/archive/2006/09/07/745085.aspx
そこで彼は、自分のアプリに必要な型を実装するために行った決定について語っています。
私が書く必要があるコードについてこれらについて話しているとしたら、他のプログラマーは次のいずれかを考えるでしょう。
- 何もないときに先のことを考えすぎているため、時期尚早に最適化しています。
- スローダウンやパフォーマンスの問題が発生していないのに、取るに足らない詳細を考えすぎる。
または両方。
そして、それを実装するだけで、問題が発生するまでこれらについて心配しないことをお勧めします。
どちらがより優遇されますか?
実装が完了する前に、パフォーマンスが重要なアプリケーションの時期尚早な最適化と情報に基づいた意思決定を区別する方法は?
java - Java: 列挙型と if-then-else のパフォーマンス
Google を使用してこの比較について簡潔な回答を得ることができなかったので、時間のかかる独自の評価を行うのではなく、最初に質問することにしました。
列挙型を使用した switch ステートメントは、if-then-else ステートメントよりも高速に実行されると確信していますが、それが顕著な違いであるかどうかは別の問題です。
誰かが私のためにこれに光を当てることができますか?
迅速な対応に感謝します。今後のプロジェクトでこれを念頭に置きます。
python - ずんぐりした配列をせん断する
numpy配列を「せん断」したいのですが。「せん断」という用語を正しく使用しているかどうかはわかりません。せん断とは、次のような意味です。
最初の列を0桁
シフトします。2番目の列を1桁
シフトします。3番目の列を2桁シフトし
ます。
したがって、この配列:
次のいずれかの配列になります。
またはこの配列のようなもの:
エッジの処理方法によって異なります。私はエッジの振る舞いにあまりこだわっていません。
これを行う関数での私の試みは次のとおりです。
うまくいくようです。そうでない場合は教えてください!
また、不格好でエレガントではないようです。これを行う組み込みのnumpy/scipy関数を見落としていますか?numpyでこれを行うためのよりクリーン/より良い/より効率的な方法はありますか?私は車輪の再発明をしていますか?
編集:
これが2Dの場合だけでなく、N次元配列で機能する場合のボーナスポイント。
この関数は、データ処理で何度も繰り返すループの中心にあるため、実際に最適化する価値があると思います。
2番目の編集:私はついにいくつかのベンチマークを行いました。ループにもかかわらず、numpy.rollが進むべき道のようです。ありがとう、tom10とSven Marnach!
ベンチマークコード:(Windowsで実行し、Linuxではtime.clockを使用しないでください)
r - テーブルスライスはRでメモリを占有しますか?
列名などを使用してテーブルのスライスを取得した場合、R はスライスを新しい場所に保持するためにメモリを割り当てますか? 具体的には、特に、列の深さ1と深さ2を持つテーブルがあります。2 つの最大値と最小値を含む列を追加したいと考えています。私には2つのアプローチがあります:
また
新しいメモリを使い果たしていない場合は、スライスを 1 回だけ取得します。それ以外の場合は、再割り当てを保存します。どちらの方がよいですか?大規模なデータセットを処理する場合、メモリの問題が重大になる可能性があるため、すべての邪悪なミームの根源でこれを否定しないでください.
unit-testing - 単体テスト用にクラスを最適化することは良い方法ですか、それとも時期尚早ですか?
StackOverflow で時期尚早の最適化に関する多くの質問を見ました (そして検索しました)。巷の言葉は、それがすべての悪の根源であるということです。:PI 私はしばしばこれについて有罪であることを告白します。コードの読みやすさを犠牲にして速度を最適化するわけではありませんが、タスクにより適していると思われるデータ型とメソッドを使用して論理的な方法でコードを書き直します (たとえば、Actionscript 3 では、型なし配列の代わりに型付きベクトルを使用します)。コードをよりエレガントにすることができれば、そうします。これは通常、自分のコードを理解するのに役立ち、これらの変更を行っている理由がよくわかります。
いずれにせよ、今日考えていたのは、OOP ではカプセル化を促進し、実装を隠してインターフェースを促進しようとして、クラスが疎結合になるようにすることです。アイデアは、内部で何が起こっているかを知らなくても機能するもの、つまりブラック ボックスのアイデアを作成することです。
そういうわけで、ここに私の質問があります.OOPはモジュール性を促進するので、クラスレベルでコードの深い最適化を試みるのは賢明ですか? それとも、これは時期尚早の最適化のカテゴリに分類されますか? ユニットテストを容易にサポートする言語を使用すると、クラス自体が入力を受け取り、出力を生成するモジュールであるため、クラスのテスト、ベンチマーク、および最適化を行うことができると考えています。しかし、コードを書いている一人の人間として、プロジェクトが完全に終了するまで待ってから最適化を開始する方が賢明かどうかはわかりません。
参考までに: 私はこれまでチームで働いたことがないので、このような経験を持つ開発者にとって明らかなことは、私にとってはなじみのないことかもしれません。
この質問が StackOverflow に適していることを願っています。クエリに直接答えた別の質問は見つかりませんでした。
ありがとう!
編集:質問について考えてみると、「プロファイリング」が「単体テスト」ではなく正しい用語だった可能性があることに気付きました。単体テストではモジュールが正常に動作することを確認し、プロファイリングではパフォーマンスを確認します。さらに、私が以前に尋ねるべきだった質問の一部 - 個々のモジュールを作成した後にプロファイリングしても、アプリケーションが完成した後のプロファイリングの時間は短縮されませんか?
私の質問は、私がやろうとしているゲーム開発から生じています - グラフィックエンジンなど、最適に動作するモジュールを作成する必要があります (それらが別の話になるかどうか:D)。パフォーマンスがそれほど重要でないアプリケーションでは、おそらくこれについて心配する必要はありません。