問題タブ [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.
premature-optimization - 遅いマシンで開発するのは時期尚早の最適化ですか?
早期に最適化する必要があるため、遅いボクセンで開発する必要があります。
Randall Hyde はThe Fallacy of Premature Optimizationで指摘していますが、Hoare の引用には多くの誤解があります。
約 97% の確率で、わずかな効率性を忘れる必要があります。時期尚早の最適化は諸悪の根源です。
特に、最近の機械はホーアの時代に比べて悲鳴をあげていますが、それは「最適化を避けるべき」という意味ではありません。では、私の尊敬する同僚は、適度なテンポのボックスで開発するべきだと彼が提案したとき、一理ありますか? 遅いボックスではパフォーマンスのボトルネックがより苛立たしいので、注意を引く可能性が高いという考えです。
python - パイソン | 効率とパフォーマンス
1 つのスクリプトを実行して 100 個の浮動小数点数をリストに保存するとします。ほとんどの場合、処理にいくらかのメモリが必要です。したがって、このコードがアプリケーションの要件として毎回実行されると、パフォーマンスが低下します。私の質問は、パフォーマンスを向上させるために効率を維持する方法です。
モックアップ コード:
ありがとう。
java - メソッドを n 回呼び出す: 変換された for-each ループまたは従来の for ループを使用する必要がありますか?
任意の int 値にループアップする必要がある場合、値を配列に変換して配列を for-each にするか、従来の for ループを使用する方が良いプログラミング方法ですか?
参考までに、6 面ダイスを複数回投げて、5 と 6 の結果 (「ヒット」) の数を計算しています。私の任意の int 値は、複数のスローの数を表す dicePool です。
私が理解しているように、2つのオプションがあります。
dicePool を配列に変換し、配列を for-each します。
/li>従来の for ループを使用します。
/li>
for-each ループはオプション 2 の従来の for ループよりも効率的ですが、オプション 1 は扱いにくいコードであり、不必要に配列を作成する必要があるというのが私の見解です。
asp.net - count(*) は本当に高価ですか?
異なるテーブルに基づく 4 つの異なるレポートを表示する 4 つのタブがあるページがあります。
クエリを使用して各テーブルの行数を取得し、各テーブルで使用select count(*) from <table>
可能な行数をタブに表示します。その結果、ページのポストバックごとに 5 つのcount(*)
クエリが実行され (カウントを取得するために 4 つ、ページネーションのために 1 つ)、レポート コンテンツを取得するために 1 つのクエリが実行されます。
今私の質問は:count(*)
クエリは本当に高価ですか? 複数回クエリするのではなく、ページのビュー状態で行数 (少なくともタブに表示されるもの) を保持する必要がありますか?
COUNT(*) クエリのコストはどれくらいですか?
java - ゲッターを複数回呼び出すか、一度呼び出して変数に代入しますか?
次のようなクラスがあるとします:
私の Main クラスでは、getAge()
メソッドを何度も呼び出しています。
したがって、何度も呼び出すか、一度呼び出して変数に割り当ててその変数を使用することをお勧めします。
どちらが最適で、その理由は?
c - Cを知ることは、高級言語で書いたコードを実際に傷つけることができますか?
質問は解決したようで、殴打されて死ぬことさえあります。賢い人々はこの問題について賢いことを言っています。本当に優れたプログラマーになるには、Cを知る必要があります。
それともあなたは?
私は今週2回啓発されました。最初のものは、私の仮定がそれらの背後にある私の知識よりも進んでいないこと、そして私のマシンで実行されているソフトウェアの複雑さを考えると、それはほとんど存在しないことに気づきました。しかし、実際にそれを家に追いやったのは、このスラッシュドットのコメントでした:
その結果、従来のCの「ベアメタル」プログラマーが高級言語が実装されていると想定する多くの素朴な方法に気づきました。彼らは、コンパイラがどのように機能するか、または優れたランタイムシステムが彼らが理解する素朴なマクロアセンブラモデルとどのように異なるかを知らないため、影響を与えるプロジェクトで悪い「最適化」決定を下します。
それからそれは私を襲った:Cは他のすべてのように、もう1つの抽象化です。CPU自体でさえ抽象化にすぎません!私はそれを測定するためのツールを持っていないので、私はそれが壊れているのを見たことがありません。
よくわかりません。ダイクストラがBASICについて言ったように、私の心は回復を超えて切断されましたか?私は時期尚早の最適化の一定の状態に住んでいますか?何も知らないことに気づいた今、希望はありますか?知っておくべきことはありますか?そして、なぜそれがとても魅力的で、過去5年間に私が書いたすべてが根本的に間違っていたのでしょうか?
要約すると、APIドキュメントが教えてくれる以上のことを知ることに価値はありますか?
編集:CWを作成しました。もちろん、これはまた、私たちよりも優れたインタープリター/ランタイム最適化の例を投稿する必要があることも意味します:)
asp.net - 高速WebアプリにはHttpResponse.End()を使用する必要がありますか?
HttpResponse.End()は、msdnによると例外をスローするようです。現在、スレッドの終了を示す値を返すか(2つの関数の深さしかありません)、end()を呼び出すかを選択できます。
例外のスローは非常に遅いことを知っています(C#/。NETテストのコメントを読んでください)。したがって、高速なWebアプリが必要な場合は、呼び出さないのが簡単なときに呼び出さないことを検討する必要がありますか?
-編集-ユーザーがログインしていることを確認するために、特定の関数とクラスのコンストラクターに関数呼び出しがあります。したがって、通常のサイトでの使用ではあまり頻繁に発生しないことを願って、十分な場所でHttpResponse.End()を呼び出します。 。
premature-optimization - 時期尚早の最適化を正しく理解していますか?
私は自分が書いているアプリケーションに苦労してきましたが、私の問題は時期尚早の最適化にあることに気づき始めていると思います。私の完璧主義者の側は、最初からすべてを最適かつ完璧にしたいと考えていますが、これが設計をかなり複雑にしていることがわかりました. 1 つの単純なことをうまく実行する小さくてテスト可能な関数を作成する代わりに、より効率的にするために、できるだけ多くの機能を詰め込むことに傾倒しています。
たとえば、コードがより複雑になるという代償を払って、同じ情報のためにデータベースに何度もアクセスすることを避けています。私の一部は、冗長なデータベース呼び出しについて心配したくないだけです。正しいコードを書くのが簡単になり、フェッチされるデータの量はとにかく少なくなります。私の他の部分は、これを行うと非常に汚くて汚れていると感じます. :-)
私は、データベースに複数回アクセスすることに傾倒しています。これは、ここでの正しい動きだと思います。プロジェクトを完了することがより重要であり、このような最適化のためにハングアップしているように感じます. 私の質問は、時期尚早の最適化を回避するときに使用する正しい戦略ですか?
c# - C#での計算のオーバーヘッド-ゲッター/セッターの使用と配列の直接変更およびキャスト速度
私は長蛇の列を書くつもりでしたが、ここでそれを要約します:
XNAを介してNESのグラフィカルなオールドスクールスタイルをエミュレートしようとしています。ただし、私のFPSは低速で、フレームあたり65Kピクセルを変更しようとしています。すべての65Kピクセルをループして任意の色に設定すると、64FPSになります。どの色をどこに配置するかを調べるために作成したコードで、1FPSを取得します。
オブジェクト指向のコードが原因だと思います。
現在、私は物事を約6つのクラスに分けており、ゲッター/セッターがいます。少なくともフレームごとに360Kのゲッターを呼び出していると思いますが、これはかなりのオーバーヘッドだと思います。各クラスには、カスタム列挙、int、Color、またはVector2Dバイトを含む/および-または1Dまたは2D配列が含まれます。
すべてのクラスを1つにまとめて、各配列のコンテンツに直接アクセスした場合はどうなりますか?コードは混乱しているように見え、オブジェクト指向コーディングの概念を捨てますが、速度ははるかに速いかもしれません。
配列内のデータを取得/設定しようとするとブロック単位で実行されるため、アクセス違反についても心配していません。たとえば、配列へのすべての書き込みは、配列からデータにアクセスする前に行われます。
キャストに関しては、カスタム列挙、int、Color、およびVector2D、バイトを使用していると述べました。 .net Framework、XNA、XBox、C#で最も速く使用およびアクセスできるデータ型はどれですか?絶え間ないキャストがここでのスローダウンの原因かもしれないと思います。
また、数学を使用してデータを配置するインデックスを決定する代わりに、事前に計算されたルックアップテーブルを使用したので、フレームごとの定数の乗算、加算、減算、除算を使用する必要はありません。:)
java - Java バイトコード コンパイラのベンチマーク
Q.1. 最も最適な Java バイトコードを生成する無料のコンパイラはどれですか?
Q.2. Java バイトコードを最も速く実行する無料の仮想マシン (64 ビットのマルチコア CPU 上) は?
Q.3. このリストに含まれていない他の (現在アクティブな) コンパイラ プロジェクトは次のとおりです。
- http://www.ibm.com/developerworks/java/jdk/
- http://gcc.gnu.org/java/
- http://openjdk.java.net/groups/compiler/
- http://java.sun.com/javase/downloads/
- http://download.eclipse.org/eclipse/downloads/
Q.4. JIT ではできない (またはしない) コンパイラでできるパフォーマンスの向上は何ですか?
Q.5. 最近のベンチマーク、比較、またはシュートアウト (第 1 四半期または第 2 四半期) はどこにありますか?
ありがとうございました!