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

アプリケーションのパフォーマンスの向上に関する質問です。これは、ソフトウェアアーキテクチャの選択からアルゴリズムの選択までさまざまです。

3
Java 8でラムダ構文の代わりにメソッド参照構文を使用すると、パフォーマンス上の利点はありますか?
メソッド参照はラムダラッパーのオーバーヘッドをスキップしますか?将来的にはそうなるのでしょうか? メソッド参照に関するJavaチュートリアルによると: 時々...ラムダ式は既存のメソッドを呼び出すだけです。これらの場合、既存のメソッドを名前で参照する方が明確な場合がよくあります。メソッド参照により、これを行うことができます。これらは、既に名前を持っているメソッドのコンパクトで読みやすいラムダ式です。 いくつかの理由から、メソッド参照構文よりもラムダ構文の方が好きです。 ラムダはより明確です Oracleの主張にもかかわらず、メソッド参照構文があいまいであるため、ラムダ構文はオブジェクトメソッド参照の速記より読みやすいと思います。 Bar::foo xのクラスで静的な1引数のメソッドを呼び出してxを渡しますか? x -> Bar.foo(x) または、xで引数のないインスタンスメソッドを呼び出していますか? x -> x.foo() メソッド参照構文は、どちらの代わりにもなります。コードが実際に行っていることを隠します。 ラムダはより安全です クラスメソッドとしてBar :: fooを参照し、Barが後で同じ名前のインスタンスメソッドを追加した場合(またはその逆)、コードはコンパイルされなくなります。 ラムダを一貫して使用できます 任意の関数をラムダでラップできます。そのため、どこでも同じ構文を一貫して使用できます。メソッド参照構文は、プリミティブ配列を取得または返すメソッド、チェックされた例外をスローするメソッド、またはインスタンスと静的メソッドとして使用されるメソッド名が同じメソッドでは機能しません(メソッド参照構文が呼び出されるメソッドについて曖昧だからです) 。同じ数の引数を持つメソッドをオーバーロードした場合は機能しませんが、とにかくそれを行うべきではないため(Josh Blochの項目41を参照)、メソッド参照に対してそれを保持することはできません。 結論 パフォーマンスの低下がない場合は、IDEで警告をオフにし、メソッド参照をコードに散在させることなくラムダ構文を一貫して使用したいと思います。 PS ここでもそこでもありませんが、私の夢では、オブジェクトメソッドの参照は次のように見え、ラムダラッパーなしでメソッドに対してinvoke-dynamicを直接適用します。 _.foo()

10
「適切な」プログラミングはもはや重要ではありませんか?
暇なときにAndroidゲームを作成しています。libgdxライブラリを使用しているので、かなり面倒な作業が行われます。 開発中に、いくつかの手順で不注意にデータ型を選択しました。連想配列に近いものが欲しかったため、ハッシュテーブルを使用しました。人間が読めるキー値。同様のことを達成する他の場所では、ベクトルを使用します。libgdxにはvector2およびvector3クラスがありますが、それらを使用したことはありません。 奇妙な問題に遭遇し、Stack Overflowでヘルプを検索すると、特定のデータ型が技術的に「適切」である場合に、特定のデータ型を使用する質問を多くの人がリーミングしています。ArrayListを使用するのと同様、定義済みの境界を必要としないため、新しい既知の境界でint []を再定義します。または、次のような些細なことでも: for(int i = 0; i < items.length; i ++) { // do something } 私はそれがすべての反復でitem.lengthを評価することを知っています。ただし、アイテムが15〜20個を超えることはありません。したがって、繰り返しごとにitems.lengthを評価する場合は注意が必要ですか? いくつかのテストを実行して、先ほど説明した方法と適切な方法を使用してアプリがどのように動作するかを確認し、チュートリアルに従って、コミュニティから提案された正確なデータ型を使用しました。結果:同じこと。平均45 fps。電話とgalaxyタブですべてのアプリを開きました。変わりはない。 だから私はあなたへの私の質問はこれだと思う:それは適切であることがもはや重要ではないときにしきい値はありますか?「仕事をやり遂げる限り、私は気にしませんか?」と言っても大丈夫ですか?

8
NoSQLがSQLより速いのはなぜですか?
最近、私は尋ねられました: NoSQLがSQLより速いのはなぜですか? 私は質問の前提に同意しませんでした...個人的にはそれはナンセンスです。SQLの代わりにNoSQLを使用しても、パフォーマンスが向上することはありません。たぶん、そうではありませんが、NoSQL上のSQLです。 NoSQLについて何か不足していますか?

10
インラインスクリプトを避けるべき理由
最近、知識のある友人が私が立ち上げたウェブサイトを見て、「非常にクールなサイト、ソースコードのインラインスクリプトについての恥」などのコメントをしました。 私は間違いなく、インラインスクリプトが発生する場所を削除する立場にあります。私はそれが「悪いこと」であることを漠然と認識しています。私の質問は、インラインスクリプトの本当の問題は何ですか?重大なパフォーマンスの問題がありますか、それともほとんど良いスタイルの問題ですか?インラインスクリプティングの前線で即座にアクションを実行することを上司に正当化できますか?Webサイトにアクセスしてソースコードを覗いてみると、どのような要因が「うーん、ここでのプロフェッショナルな仕事」と言ってしまうでしょうか。 さて、その質問は執筆中に複数の質問に変わりました。しかし、基本的に、インラインスクリプティング-契約は何ですか?

7
ソフトウェアプログラミングでは、CPUとGPUの両方の負荷を100%にすることは可能ですか?
これは、私がゲーマーとして面白いと思った主題に関する一般的な質問です:CPU / GPUのボトルネックとプログラミング。間違っていなければ、CPUとGPUの両方が計算を行うことを理解するようになりましたが、アーキテクチャの違いにより、ある計算では他の計算よりも優れていることがわかりました。たとえば、クラッキングハッシュまたは暗号通貨マイニングは、CPUよりもGPUの方が効率的であると思われます。 だから私は疑問に思った:CPUが50%(例えば)である間、100%の負荷でGPUを持っていることは避けられない? または、より正確に:最初に1つが100%の負荷である場合、GPUによって通常行われるいくつかの計算はCPUによって行われ、両方とも100%の負荷に達することができますか? 私はこの主題について少し検索しましたが、かなり手ぶらで戻ってきました。これがこのサブセクションに位置し、あなたが私に与えるかもしれないどんな文書や講義にも開かれていると思います!

4
Javaと比較したScalaのパフォーマンス
まず第一に、これはどちらが優れているかを判断するための言語-X-言語-Yの質問ではないことを明確にしたいと思います。 私はJavaを長い間使用しており、Javaを使用し続けるつもりです。これと並行して、私は現在非常に興味を持ってScalaを学んでいます。私の印象に慣れる小さなことは別として、私はこの言語で本当にうまく働くことができるということです。 私の質問は、Scalaで書かれたソフトウェアはJavaで書かれたソフトウェアと比較して、実行速度とメモリ消費量の点でどうですか?もちろん、これは一般的に答えるのが難しい質問ですが、パターンマッチング、高階関数などの高レベルの構成体がオーバーヘッドをもたらすと予想されます。 ただし、Scalaでの私の現在の経験は、コードが50行未満の小さな例に限定されており、これまでベンチマークを実行していません。したがって、実際のデータはありません。 ScalaにJava に対するオーバーヘッドがあることが判明した場合、Scala のより複雑な部分とJavaのパフォーマンスに重要な部分をコーディングするScala / Javaプロジェクトを混合するのは理にかなっていますか?これは一般的な習慣ですか? 編集1 私は小さなベンチマークを実行しました。整数のリストを作成し、各整数に2を掛けて新しいリストに入れ、結果のリストを出力します。Java実装(Java 6)とScala実装(Scala 2.9)を作成しました。Ubuntu 10.04でEclipse Indigoで両方を実行しました。 結果は比較可能です:Javaで480ミリ秒、Scalaで493ミリ秒(100回の繰り返しの平均)。ここに私が使用したスニペットがあります。 // Java public static void main(String[] args) { long total = 0; final int maxCount = 100; for (int count = 0; count < maxCount; count++) { final long t1 = System.currentTimeMillis(); final int …

19
仕事でより良い仕事をするために、自分のお金でハードウェアを購入して職場で使用しますか?[閉まっている]
職場では、かなり仕様のマシン(デュアルクアッド2GHz、4GB RAM、160GB 7200RPMドライブ、Win7)が与えられましたが、いくつかの場所(HDD / RAM)に欠けていました。ITスタッフはハードウェアを自分のハードウェアに交換しても問題なかったので、SSDと8GBのRAMを追加しました(複数のVisual Studioと仮想マシンを実行できます)。マシンを選択するのは会社のビジネス上の決定でしたが、ハードウェアの高速化により仕事での満足度と生産性が向上しました。 私の質問は、生活の質を向上させるために自分の仕事用ハードウェアに個人的なお金を費やす意思があるのは私だけだと思いますか?遡及的に「ハードウェアでこの500ドルを払い戻すべきだと思う」と言うことは可能ですか?

6
DDD集計はWebアプリケーションで本当に良いアイデアですか?
私はドメイン駆動設計に飛び込み、私が出会う概念のいくつかは表面的にはかなり理にかなっていますが、それらについてもっと考えるとき、それは本当に良いアイデアかどうか疑問に思う必要があります。 たとえば、集計の概念は理にかなっています。ドメインモデル全体を扱う必要がないように、所有権の小さなドメインを作成します。 ただし、これをWebアプリのコンテキストで考えると、データベースに頻繁にアクセスして、データの小さなサブセットを取り戻します。たとえば、ページには注文の数だけがリストされ、クリックして注文を開いて注文IDを表示するリンクが表示されます。 私は右の理解集約だ場合、私は一般的にメンバーが含まれますOrderAggregateを返すために、リポジトリのパターンを使用することになりGetAll、GetByID、Delete、とSave。いいですね。しかし... GetAllを呼び出してすべての注文を一覧表示すると、このパターンでは、集計情報の一覧全体、注文全体、注文明細などが返される必要があるように思えます。その情報の小さなサブセットのみが必要な場合(ヘッダー情報のみ)。 何か不足していますか?または、ここで使用する最適化のレベルがありますか?必要のないときに情報の集合体全体を返すことを支持する人がいるとは想像できません。 確かに、リポジトリのようなメソッドを作成できGetOrderHeadersますが、そもそもリポジトリのようなパターンを使用する目的に反しているようです。 誰も私のためにこれを明確にすることはできますか? 編集: さらに調査を重ねた結果、ここでの断絶は、純粋なリポジトリパターンが、ほとんどの人がリポジトリと考えているものと異なることだと思います。 Fowlerは、リポジトリをコレクションセマンティクスを使用するデータストアとして定義し、通常はメモリ内に保持されます。これは、オブジェクトグラフ全体を作成することを意味します。 Evansはリポジトリを変更して集約ルートを含めるため、リポジトリは切断され、集約内のオブジェクトのみをサポートします。 ほとんどの人は、リポジトリを栄光に満ちたデータアクセスオブジェクトと考えているようです。ここでは、必要なデータを取得するメソッドを作成するだけです。これは、ファウラーの「エンタープライズアプリケーションアーキテクチャのパターン」で説明されているような意図ではないようです。 さらに、リポジトリは、主にテストとモック作成を簡単にするため、または永続性をシステムの残りの部分から切り離すために使用される単純な抽象化と考えています。 答えは、これが最初に思っていたよりもはるかに複雑な概念であると思います。

12
OOPのドキュメントでは、「getter」が計算を実行するかどうかの指定を避ける必要がありますか?
私の学校のCSプログラムでは、オブジェクト指向プログラミングについては一切言及していません。そのため、私はそれを補足するために独力で読んでいます。具体的には、Bertrand MeyerによるObject Oriented Software Constructionです。 Meyerは、クラスが実装に関する可能な限り多くの情報を隠すべきであると繰り返し指摘していますが、これは理にかなっています。特に、彼は、属性(つまり、クラスの静的で計算されていないプロパティ)とルーチン(関数/プロシージャ呼び出しに対応するクラスのプロパティ)を互いに区別できないと繰り返し主張しています。 たとえば、クラスPersonに属性がある場合、定数属性として定義されている場所またはのようなものに内部的に対応するageかどうかを表記法から判断Person.ageすることは不可能であると主張します。これは私にとって理にかなっています。ただし、彼は次のように主張し続けています。return current_year - self.birth_datereturn self.ageself.age クラスの短い形式として知られるクラスの標準クライアントドキュメントは、特定の機能が属性または関数のどちらであるかを明らかにしないように考案されます。 つまり、クラスのドキュメントでさえ、「getter」が計算を実行するかどうかを指定することを避けるべきだと主張しています。 これ、私は従わない。この区別をユーザーに知らせることが重要になるのは、ドキュメントだけではありませんか?Personオブジェクトで満たされたデータベースを設計する場合Person.age、高価な呼び出しかどうかを知ることは重要ではないので、何らかのキャッシュを実装するかどうかを決定できますか?彼が言っていることを誤解していませんか、それとも彼はOOP設計哲学の特に極端な例ですか?

12
C / C ++のコンパイル可能な最新の代替[クローズ]
新しいソフトウェア製品の作成を検討しています。パフォーマンスが重要になるため、インタープリターまたは言語、またはエミュレーションレイヤーを使用する言語(Javaを読む)の使用には注意が必要です。 これにより、C(またはC ++)を使用することを考えることになりますが、どちらもかなり長いです。私も長い間使用していません。過去20年間で、誰かがおそらくかなり人気があり、コードを作成してコンパイルするのに適したものを作成したと考えました。 高性能のコンパイル済みコードを作成するためのCには、他にどのような代替手段がありますか? C ++が15年前とは異なる獣である場合、私はそれを検討するでしょう、私はそれがいくつかの固有の問題を抱えていると仮定したと思います。 並列化は重要ですが、おそらく複数のマシン間ではそうではありません。

6
アプリケーションをスケーラブルにするものは何ですか?
求人情報では、応募者が「スケーラブル」な申請書を作成した経験を持っている必要があります。アプリケーションをスケーラブルにする理由は何ですか?また、コードが何百万人ものユーザーに対応できることをどのように知るのですか この質問を表現するより良い方法は、スケーラビリティを念頭に置いてコードを作成するにはどうすればよいでしょうか そのため、コードは後から考えるのとは対照的に、導入から拡張可能です。特定の設計手法はありますか?それとも、単に仕事に適したアルゴリズムを選ぶだけの問題ですか?


3
データベースのテキスト列にvarcharを使用する理由はありますか?
あるvarcharだけで残りは以前からtext周囲に来た、またはあなたが考えケースが使用されたい使用するにはvarchar?(またはcharそのことについて..) (私は毎日PostgresとMySQL(MyISAM)を使用しているので、それらは私が最も興味を持っているものですが、他のデータベースへの回答はもちろん歓迎です。^ _-)

1
btreeとrtreeのインデックス作成の違いは何ですか?
MySQLWorkbenchで、デザインをフォワードエンジニアリングする前にインデックスを保存する方法を選択できることに気付きました。ストレージタイプは次のとおりです。 BTREE RTREE ハッシュ これを調査して、頭上にある情報を見つけたので、これらの違いや、なぜ選択する必要があるのか​​、あるいはその両方に関する実用的な情報を探しています。 また、ストレージタイプを選択したことがないため、MySQLがデフォルトのストレージタイプ(BTREE?)を選択していると思います。

12
コードの作成方法の段階的なシフトは、システムのパフォーマンスに影響しましたか?そして、私は気にする必要がありますか?
TD; DR: 私が尋ねていたものに関していくつかの混乱があったので、ここに質問の背後にある運転のアイデアがあります: 私はいつもそれが何であるかという質問を意図していました。当初はうまく表現できなかったかもしれません。しかし、意図は常に「モジュール式、分離、疎結合、分離、リファクタリングされたコード」であり、「モノリシックな単一ユニット、1か所ですべてを行う、1つのファイル、密結合された」コードよりも、それ自体の性質が著しく遅い。残りは単なる詳細であり、その際に私が出会った、または現在または将来出会うであろうさまざまな症状です。ある程度の規模では確かに遅いです。最適化されていないディスクのように、どこからでも断片を拾わなければなりません。遅いです。確かに。しかし、私は気にする必要がありますか? そして問題は…ではない マイクロ最適化、時期尚早な最適化などに関するものではありません。「これまたはその部分を最適化して死ぬ」ことではありません。 それは何ですか? それは、時間の経過とともに現れたコードの記述についての全体的な方法論と手法、および考え方に関するものです。 「このコードを依存関係としてクラスに挿入する」 「クラスごとに1つのファイルを書き込む」 「データベース、コントローラー、ドメインからビューを分離する」。 スパゲッティの均質な単一のコードブロックを書くのではなく、一緒に動作する多くの個別のモジュールコンポーネントを書く 現在-この10年以内に-ほとんどのフレームワークで見られ、主張され、規約で主張され、コミュニティを介して伝えられているコードの方法とスタイルについてです。「モノリシックブロック」から「マイクロサービス」への考え方の転換です。それに伴い、マシンレベルのパフォーマンスとオーバーヘッド、さらにプログラマレベルのオーバーヘッドの面で価格が発生します。 元の質問は次のとおりです。 コンピュータサイエンスの分野では、プログラミングに関しては思考の著しい変化に気付きました。私はこのようなアドバイスを頻繁に目にします。 より小さな関数ごとのコードを記述します(この方法によりテストと保守が容易になります) ほとんどのメソッド/関数の長さが数行になり、目的が明確になるまで、既存のコードをますます小さなコードチャンクにリファクタリングします(より大きなモノリシックブロックと比較して、より多くの関数を作成します) 1つのことだけを行う関数を書く-関心の分離など(通常、スタック上により多くの関数とフレームを作成します) より多くのファイルを作成します(ファイルごとに1つのクラス、MVC、ドメインアーキテクチャ、デザインパターン、オブジェクト指向などのレイヤーの目的のために、より多くのファイルシステム呼び出しを作成するために、分解の目的でより多くのクラス) これは、2500行にまたがるメソッドと、すべてを行う大きなクラスと神オブジェクトを持つ「古い」または「時代遅れの」または「スパゲッティ」コーディングプラクティスと比較した変更です。 私の質問はこれです: 呼び出しがマシンコード、1と0、アセンブリ命令、HDDプラッターに至るとき、リファクタリングされたさまざまな小から小の関数とメソッドを備えた完全にクラス分離されたOOコードも生成されることを心配する必要がありますか余分なオーバーヘッドですか? 詳細 OOコードとそのメソッド呼び出しが最終的にASMでどのように処理されるか、またDB呼び出しとコンパイラー呼び出しがHDDプラッター上のアクチュエータアームの移動にどのように変換されるかについてはよく知りませんが、いくつかの考えがあります。追加の関数呼び出し、オブジェクト呼び出し、または(#include)呼び出し(一部の言語)は、追加の命令セットを生成するため、実際の「有用な」コードを追加することなく、コードの量を増やし、さまざまな「コードワイヤリング」オーバーヘッドを追加すると想定しています。また、ASMが実際にハードウェアで実行される前に、ASMに対して適切な最適化を実行できることも想像しますが、その最適化を実行できるのはそれだけです。 したがって、私の質問-十分に分離されたコード(何百ものファイル、クラス、デザインパターンなどに分割されるコード)が(スペースと速度で)どのくらいのオーバーヘッドをもたらすかは、「このオーバーヘッドのために、すべてを1つのモノリシックファイルに」 明確にするために更新: 同じコードを取得して分割し、リファクタリングし、より多くの関数とオブジェクト、メソッド、クラスに分離することで、より小さなコード間でより多くのパラメーターが渡されると想定しています。確かに、リファクタリングコードはスレッドを継続する必要があり、そのためにはパラメーターを渡す必要があります。より多くのメソッドまたはより多くのクラスまたはより多くのファクトリメソッドのデザインパターンは、単一のモノリシッククラスまたはメソッドの場合よりも、さまざまな情報を渡すオーバーヘッドを増やします。 どこか(TBDを引用)では、すべてのコードの最大70%がASMのMOV命令で構成され、実際の計算ではなくCPUレジスタに適切な変数をロードすると言われていました。私の場合、PUSH / POP命令を使用してCPUの時間を増やし、さまざまなコード間でリンケージとパラメーターの受け渡しを行います。コードを小さくするほど、より多くのオーバーヘッド「リンケージ」が必要になります。このリンケージがソフトウェアの肥大化とスローダウンに追加することを懸念しており、これを心配する必要があるのか​​、もしあれば、どれくらいの量を心配する必要があるのか​​、次の世紀のソフトウェアを構築しているプログラマーの現在と将来の世代、これらのプラクティスを使用して構築されたソフトウェアと共存し、使用する必要があります。 更新:複数のファイル 古いコードを徐々に置き換えている新しいコードを書いています。特に、古いクラスの1つが〜3000行のファイルであったことに注意しました(前述のとおり)。今では、テストファイルを含むさまざまなディレクトリに配置された15〜20のファイルのセットになりつつあり、いくつかのものを結合するために使用しているPHPフレームワークは含まれません。さらに多くのファイルが来ています。ディスクI / Oに関しては、複数のファイルのロードは、1つの大きなファイルのロードよりも遅くなります。もちろん、すべてのファイルがロードされるわけではなく、必要に応じてロードされ、ディスクキャッシングとメモリキャッシングのオプションが存在しますが、それでもメモリloading multiple filesよりも多くの処理が必要になると思いloading a single fileます。それを懸念に加えています。 更新:依存性のすべてを注入 しばらくしてこれに戻って..私の質問は誤解されたと思います。または、いくつかの答えを誤解することを選んだかもしれません。いくつかの答えが出てきたので、マイクロ最適化については話していません(少なくとも、マイクロ最適化について話していることは間違った呼び方だと思います)。 、コードのあらゆるレベルで。私は最近、このスタイルのコードがコンベンションの中心的なポイントの1つであり、Zend Conから来ました。ビューからロジック、モデルからビュー、データベースからモデルを分離し、可能であればデータベースからデータを分離します。依存関係-すべてを挿入します。これは、何もしない配線コード(関数、クラス、ボイラープレート)を追加することを意味する場合があります、ただし、シーム/フックポイントとして機能し、ほとんどの場合、コードサイズを簡単に2倍にします。 更新2:「コードをより多くのファイルに分割する」ことは、パフォーマンスに大きな影響を与えますか(コンピューティングのすべてのレベルで) compartmentalize your code into multiple files今日のコンピューティング(パフォーマンス、ディスク使用率、メモリ管理、CPU処理タスク)の哲学はどのように影響しますか? …

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