タグ付けされた質問 「performance」

コードおよびアプリケーション効率の測定または改善に関する質問。

24
Javaでのinstanceofの使用によるパフォーマンスへの影響
私はアプリケーションに取り組んでおり、1つの設計アプローチにはinstanceofオペレーターの非常に重い使用が含まれます。OO設計は一般的にの使用を避けようとすることは知っていますがinstanceof、それは別の話であり、この質問は純粋にパフォーマンスに関連しています。パフォーマンスに影響があるかどうか疑問に思っていましたか?と同じくらい速い==ですか? たとえば、10個のサブクラスを持つ基本クラスがあります。基本クラスを取る単一の関数で、クラスがサブクラスのインスタンスであるかどうかを確認し、いくつかのルーチンを実行します。 私がそれを解決することを考えた他の方法の1つは、代わりに「type id」整数プリミティブを使用し、ビットマスクを使用してサブクラスのカテゴリを表し、次にサブクラス「type id」のビットマスク比較をカテゴリーを表す定数マスク。 されてinstanceof何とかよりも速いことをJVMによって最適化?Javaにこだわりたいのですが、アプリのパフォーマンスが重要です。以前にこの道を下ったことがある誰かがいくつかのアドバイスを提供できればそれはクールです。あまりにもつまらないか、最適化するために間違っていることに焦点を合わせていますか?

25
ループの前またはループで変数を宣言することの違いは?
一般に、ループ内で繰り返し実行するのではなく、ループの前にスローアウェイ変数を宣言すると、(パフォーマンスの)違いが出るのかといつも疑問に思っていました。(かなり無意味な) Javaでの例: a)ループ前の宣言: double intermediateResult; for(int i=0; i < 1000; i++){ intermediateResult = i; System.out.println(intermediateResult); } b)ループ内で(繰り返し)宣言: for(int i=0; i < 1000; i++){ double intermediateResult = i; System.out.println(intermediateResult); } どちらが、より良いですかB? 変数宣言を繰り返すと(例b)、理論上はオーバーヘッドが増えると思いますが、コンパイラーは十分にスマートであるため、問題ではありません。例bには、よりコンパクトで、変数のスコープをそれが使用される場所に制限するという利点があります。それでも、例aに従ってコーディングする傾向があります。 編集:私は特にJavaのケースに興味があります。

12
スレッドの数は多すぎますか?
私はサーバーを書いていて、リクエストを受け取ったときにそれぞれのアクションを別々のスレッドに送ります。ほとんどすべてのリクエストがデータベースクエリを作成するため、これを行います。私はスレッドプールライブラリを使用して、スレッドの構築/破棄を削減しています。 私の質問は次のとおりです。これらのようなI / Oスレッドの適切なカットオフポイントは何ですか?おおよその概算であることは知っていますが、何百もの話をしていますか?何千? このカットオフがどうなるかを理解するにはどうすればよいですか? 編集: 回答ありがとうございます。スレッド数の上限を調べるためにテストする必要があるようです。しかし、問題は、私がその上限に達したことをどのようにして知ることができるかです。正確に何を測定すべきですか?

14
小さなファビコンがさらに別のHTTPリクエストを必要とするのはばかげていませんか?どうすればファビコンをスプライトに入れることができますか?
報奨金は、期限が切れる4日に。この質問への回答は、+ 100レピュテーションバウンティの対象となります。 Rouninは、信頼できるソースからの回答を探しています。 HTMLでfavicon.icoリンクを設定する方法は誰でも知っています。 <link rel="shortcut icon" href="http://hi.org/icon.ico" type="image/x-icon"> しかし、小さな数バイトのアイコンの場合、さらに別のHTTPリクエストが必要になるのはばかげていると思います。それでbackground-position=0px -200px;、貴重なHTTPリクエストを高速化して保存するために、どうやってその画像をスプライト(たとえば)の一部にすることができるのかと思いました。これを、ロゴやその他のアートワークを含む既存のスプライト画像に組み込むにはどうすればよいですか? favicon.icoウォーターフォールグラフのアイテム番号31を指すロボットは、私のペットのZAMです。彼は通常より幸せであり、彼は私に今日いくつかの愚かなと思う彼の服装に同意しないが、ウェブでいくつかの創造的なアップグレードの時が来たと知らせてくれる良い点を持っています...

17
PHPでのスクリプト実行時間の追跡
PHPは、max_execution_time制限を適用するために、特定のスクリプトが使用したCPU時間を追跡する必要があります。 スクリプト内でこれにアクセスする方法はありますか?実際のPHPで消費されたCPUの量に関するログをテストに含めたいと思います(スクリプトが座ってデータベースを待機している場合、時間は増加しません)。 Linuxボックスを使用しています。
289 php  performance 


12
再帰はループよりも速いですか?
再帰はループよりもクリーンな場合があることを知っています。反復に対して再帰をいつ使用するべきかについては何も質問していません。これについては多くの疑問がすでにあることを知っています。 私が求めていることは、ある再帰で、これまでより高速ループよりも?私には、ループが常に新しいスタックフレームをセットアップすることがないため、ループを改良して再帰関数よりも速く実行できるように思えます。 一部の並べ替え関数やバイナリツリーなど、再帰がデータを処理する正しい方法であるアプリケーションで、再帰がより高速であるかどうかを具体的に探しています。

2
一部のfloat <integer比較が他のものより4倍遅いのはなぜですか?
浮動小数点数を整数と比較する場合、値のペアによっては、同様の大きさの他の値よりも評価に時間がかかります。 例えば: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 しかし、浮動小数点数または整数を一定量だけ小さくまたは大きくすると、比較ははるかに速く実行されます。 &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 比較演算子を変更しても(例:==または&gt;代わりに)、時間に顕著な影響を与えることはありません。 大きい値または小さい値を選択すると比較が高速になるため、これはマグニチュードだけに関連しているわけではないので、ビットの並び方が不運なことにあるのではないかと思います。 明らかに、これらの値を比較することは、ほとんどのユースケースで十分な速さです。なぜPythonが他の値のペアよりもいくつかの値のペアで苦労しているように見えるのか、私は単に興味があります。

8
デバッグビルドとリリースビルドのパフォーマンスの違い
通常、プログラムのデバッグ構成とリリース構成の切り替えを気にしていないことを認めなければなりません。プログラムが実際に顧客の場所に展開されている場合でも、通常はデバッグ構成を選択しました。 私の知る限り、手動で変更しない場合のこれらの構成の唯一の違いは、DebugでDEBUG定数が定義されており、Releaseで最適化コードがチェックされていることです。 だから私の質問は実際には2つあります: これら2つの構成の間にパフォーマンスの違いはありますか?ここでパフォーマンスに大きな違いを引き起こす特定のタイプのコードはありますか、それとも実際にはそれほど重要ではありませんか? デバッグ構成で正常に実行され、リリース構成で失敗する可能性のあるコードの種類はありますか?または、テストされ、デバッグ構成で正常に機能するコードがリリース構成でも正常に機能することを確認できますか?


2
--depth 1で浅いクローンを作成してコミットを作成し、更新を再度プルしても安全ですか?
の--depth 1オプションgit clone: 指定したリビジョン数に切り捨てられた履歴を持つ浅いクローンを作成します。浅いリポジトリにはいくつかの制限があります(そこからクローンしたり、フェッチしたり、そこからプッシュしたりすることはできません)が、長い歴史を持つ大規模プロジェクトの最近の履歴のみに興味があり、修正をパッチとして送信します。 しかし、私は浅いクローンを正常に作成し、いくつかの変更をコミットして、それらの変更を(ベアクローン)オリジンにプッシュしました。 それは私には理にかなっています-つまり、なぜそうではないのですか?複製されたHEADがオリジンで識別可能であり、私のコミットがこの上にある場合、理由はないようです。しかし、マニュアルはそうではないと述べています。 私は浅いクローンのアイデアが好きです-例えばdrupalコアの:7から始めたときにdrupal 4で何が起こったのかを知る必要はありません-しかし私は自分を足で撃ちたくありません。 それで、浅いクローンを作成し、コミットを開発し、もう一度プルして、元の更新に追いつくのは安全ですか?

17
SQL Serverデータベースをオフラインにする際の極端な待機時間
私の開発データベースでオフラインメンテナンス(ライブバックアップからの開発データベースの復元)を実行しようとしていますが、SQL Server Management Studioを使用した[オフラインにする]コマンドの実行速度が非常に遅くなっています。速度の問題を引き起こしている可能性があるもの、またはそれを修正する方法について、オンラインで参考文献を見つけることができないようです。 一部のサイトでは、データベースへのオープン接続が原因でこの速度低下が発生することを示唆していますが、このデータベースを使用する唯一のアプリケーションは開発マシンのIISインスタンスであり、サービスは停止しています-オープン接続はありません。 このスローダウンの原因は何ですか?スピードを上げるにはどうすればよいですか?

4
隣接するintのJavaスイッチが、ケースを追加するとより速く実行されるように見えるのはなぜですか?
メインプログラムロジックの多くのポイントで呼び出されるホット関数で実行されるため、高度に最適化する必要があるいくつかのJavaコードに取り組んでいます。このコードの一部には、double変数10を任意の非負int exponentのsに乗じることによって乗算することが含まれます。(編集:なく最速、下記アップデート2参照)を一つの早道乗算値を取得するには、にあるswitchにexponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... same pattern with long literals case 18: return d*1000000000000000000L; default: throw …

10
すべてのASP.Net Webサイトが遅い理由を発見しました。どうすればよいのかを考えています。
ASP.Net Webアプリケーションのすべてのリクエストがリクエストの最初にセッションロックを取得し、リクエストの最後にそれを解放することを発見しました! 最初に私がそうであったように、これの影響があなたに失われた場合、これは基本的に以下を意味します: ASP.Net Webページの読み込みに時間がかかる(データベースの呼び出しが遅いなどの理由で)場合があり、ユーザーは待機に飽き飽きしているため、別のページに移動することを決定します。ASP.Netセッションロックにより、新しいページ要求は、元の要求が非常に遅いロードを終了するまで強制的に待機します。ああ。 UpdatePanelの読み込みが遅く、ユーザーがUpdatePanelの更新が完了する前に別のページに移動することにした場合...できません。ASP.netセッションロックにより、新しいページ要求は、元の要求が非常に遅いロードを完了するまで強制的に待機します。ダブルアレ! それで、オプションは何ですか?これまでのところ私は思いつきました: ASP.NetがサポートするカスタムSessionStateDataStoreを実装します。私はコピーするほど多くを見つけていません、そしてそれは一種のリスクが高く、簡単に失敗するようです。 進行中のすべてのリクエストを追跡し、同じユーザーからリクエストが届いた場合は、元のリクエストをキャンセルします。ちょっと極端に思えますが、うまくいくと思います。 セッションを使用しないでください!ユーザーに何らかの種類の状態が必要な場合は、代わりにキャッシュを使用し、認証されたユーザー名のキーアイテムなどを使用できます。再び極端なようです。 ASP.Net Microsoftチームがバージョン4.0のフレームワークにこのような巨大なパフォーマンスのボトルネックを残したとは本当に信じられません!明らかなものがないのですか?セッションにThreadSafeコレクションを使用するのはどれほど難しいでしょうか。

2
なぜ 'x'は( 'x'、)で 'x' == 'x'より速いのですか?
&gt;&gt;&gt; timeit.timeit("'x' in ('x',)") 0.04869917374131205 &gt;&gt;&gt; timeit.timeit("'x' == 'x'") 0.06144205736110564 また、複数の要素を持つタプルにも機能します。どちらのバージョンも直線的に増加するようです。 &gt;&gt;&gt; timeit.timeit("'x' in ('x', 'y')") 0.04866674801541748 &gt;&gt;&gt; timeit.timeit("'x' == 'x' or 'x' == 'y'") 0.06565782838087131 &gt;&gt;&gt; timeit.timeit("'x' in ('y', 'x')") 0.08975995576448526 &gt;&gt;&gt; timeit.timeit("'x' == 'y' or 'x' == 'y'") 0.12992391047427532 これに基づいて、私はどこでも完全に使い始めるべきだと思います!in==

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.