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

最適化は、既存のプログラムを改善して、より効率的に、または/およびより少ないリソースを使用して動作させるプロセスです。

6
SSDの出現は、データベースの最適化に影響を与えますか?
今日、SQL Serverの最適化に関する本を閲覧していましたが、一定量のアイデアがストレージの線形モデルに基づいているように思われました。SSDのストレージモデルはまったく異なるため、データベースの調整や最適化についての考え方に関して、何らかの形でゲームを変えますか?

4
データ指向設計-1-2を超える構造の「メンバー」では非実用的ですか?
データ指向設計の通常の例は、ボール構造です。 struct Ball { float Radius; float XYZ[3]; }; そして、彼らはstd::vector<Ball>ベクトルを繰り返すアルゴリズムを作ります。 次に、同じことを提供しますが、データ指向設計で実装されます。 struct Balls { std::vector<float> Radiuses; std::vector<XYZ[3]> XYZs; }; 最初にすべての半径で、次にすべての位置などで反復する場合、これは良いことです。ただし、ベクター内のボールをどのように移動しますか?元のバージョンでは、を持っている場合std::vector<Ball> BallsAll、any BallsAll[x]をanyに移動できますBallsAll[y]。 ただし、データ指向バージョンでこれを行うには、すべてのプロパティに対して同じことを行う必要があります(ボールの場合は2回-半径と位置)。しかし、より多くのプロパティがある場合は悪化します。「ボール」ごとにインデックスを保持する必要があり、それを移動しようとすると、プロパティのすべてのベクトルで移動する必要があります。 それは、データ指向設計のパフォーマンス上の利点を損なうものではありませんか?

7
HTML5ローカルストレージを使用してCSSとJavaScriptを保存するのは現実的ですか
考えは、頻繁にアクセスされるCSSとJavaScriptを保存するためにHTML5ローカルストレージを利用することです。 例(擬似コード): var load_from_cdn = true; if(ローカルストレージを検出) { if(cssのキャッシュ、jsが見つかった) { ローカルストレージキャッシュをロードする load_from_cdn = false; } } if(load_from_cdn) { document.write( '<script> ...'); } これは可能ですか、現実的ですか? 私はブラウザのキャッシュを認識していますが、まだいくつかのヘッダーアクセスチェックがあり ますが、HTTPアクセスの方が良いと仮定しています(私の考えでは) PS:ローカルストレージはキーと値のペアのみをサポートしているようですが、誰かがそれを証明できますか? (いくつかの例に最適)

5
constが早すぎる最適化を参照するときに引数を渡しますか?
「時期尚早の最適化はすべての悪の根源です」 これは私たち全員が同意できると思います。そして、私はそれを避けるために一生懸命努力します。 しかし最近、私はValueではなくconst Referenceによってパラメーターを渡す方法について疑問に思っています。非自明な関数引数(つまり、ほとんどの非プリミティブ型)はconst参照で渡すことが望ましいことを教えられました。これまで読んだ本の中では、これを「ベストプラクティス」として推奨しているものがかなりあります。 それでも私は不思議に思わずにはいられません:現代のコンパイラーと新しい言語機能は驚異的に機能する可能性があるため、私が学んだ知識は非常に古くなっている可能性があり、 void fooByValue(SomeDataStruct data); そして void fooByReference(const SomeDataStruct& data); 私が学んだ慣習は-const参照を渡す(非自明な型のデフォルト)-早すぎる最適化ですか?

10
開発の開始時または終了時に、パフォーマンスを向上させるためにソフトウェアを最適化するのはいつですか?
私はジュニアソフトウェア開発者であり、パフォーマンス(速度)を向上させるためにソフトウェアを最適化するのに最適な時期はいつになるのか疑問に思っていました。 ソフトウェアが非常に大きく、管理が複雑ではないと仮定すると、最初にそれを最適化するためにより多くの時間を費やす方が良いでしょうか、またはすべての機能を正しく実行するソフトウェアを開発し、パフォーマンスを向上させるために最適化を進めるべきですか?

11
C ++コンパイラは、不要な括弧を削除/最適化しますか?
コードは int a = ((1 + 2) + 3); // Easy to read より遅く走る int a = 1 + 2 + 3; // (Barely) Not quite so easy to read または、「無駄な」括弧を削除/最適化するのに十分な最新のコンパイラーです。 非常に小さな最適化の懸念のように思えるかもしれませんが、C#/ Java / ...よりもC ++を選択することは、最適化(IMHO)のすべてです。

6
C ++のインライン関数。ポイントは何ですか?
私が読んだことによると、コンパイラーはインライン関数の関数呼び出しをその本体で置き換える義務はありませんが、可能であれば置き換えます。これは私に考えさせられました-それが事実である場合、なぜ私たちはインラインワードを持っていますか?デフォルトですべての関数をインライン関数にして、呼び出しを関数本体で置き換えることができるかどうかをコンパイラーに判断させてみませんか?

18
何のために最適化していますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 一般的に、ソフトウェアを設計するとき、どのような最適化を一般的に好みますか? あなたのデザインを最適化することを好むタイプですか 開発時間(つまり、書くのが迅速で、保守が簡単) 処理時間 ストレージ(RAM、DB、ディスクなど)スペース もちろん、これは解決される問題のタイプと関係する締め切りに対して非常に主観的であるため、ある形式の最適化を別の形式よりも選択する理由についてお聞きしたいと思います。

3
再帰を使用せずにツリーを横断するにはどうすればよいですか?
メモリノードツリーが非常に大きいため、ツリーを走査する必要があります。各子ノードの戻り値を親ノードに渡します。これは、すべてのノードのデータがルートノードまでバブルするまで実行する必要があります。 トラバーサルはこのように機能します。 private Data Execute(Node pNode) { Data[] values = new Data[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // recursive } return pNode.Process(values); } public void Start(Node pRoot) { Data result = Execute(pRoot); } これは正常に機能しますが、コールスタックがノードツリーのサイズを制限するのではないかと心配しています。 への再帰呼び出しExecuteが行われないように、どのようにコードを書き直すことができますか?
19 c#  optimization  trees 

3
環境を再現できない場合のテストと最適化の方法は?
過去には、さまざまな環境で働いてきました。デスクトップアプリ、ゲーム、埋め込みコンテンツ、Webサービス、コマンドラインジョブ、Webサイト、データベースレポートなど。これらの環境はすべて同じ特徴を共有しました。複雑さやサイズに関係なく、テストするマシンまたは開発環境でアプリケーションのサブセットまたはスライスを常に保持できました。 今日はしません。今日私は、スケーラビリティに主眼を置いている環境にいることに気づきました。環境を再現することは法外に費用がかかります。環境の一部を取りますが、もっともらしい(一部のピースはシミュレートする必要があるか、実行しないようにシングルインスタンスモードで使用する必要があります)が、同時実行性とロードを不明瞭にするため、目的を無効にします実際のシステムが遭遇します。小さな「テスト」システムにも欠陥があります。2つのノードがある場合と64のノードがある場合は、動作が異なります。 最適化への私の通常のアプローチ(測定、何かを試す、正しさを検証する、違いを測定する、繰り返す)は、重要な問題の部分(同時実行性の堅牢性とパフォーマンスの下で効果的にステップ2と3を実行できないため、ここでは実際に機能しません負荷)。ただし、このシナリオはユニークではないようです。この種の環境でこの種のタスクを行うための一般的なアプローチは何ですか? 関連する質問がいくつかあります。 この質問は、ハードウェア(スペクトルアナライザーなど)が利用できないことに関するものであり、(比較的)簡単にエミュレートできます。 この質問は、実稼働環境にのみ存在するバグを追跡することに関するものです。これは役に立ちますが、異なる種類のアクティビティです。

4
NP完全問題またはNPの現実の問題
NP完全問題またはNPハード問題(ヒューリスティック、または最適以下のソリューションの追跡など)を仕事で定期的に解決する実際の例はありますか?スケジューリング、プランニング、VLSI設計などで発生することは知っていますが、今日これを定期的に行うプログラマーやエンジニアを雇用している主要産業のアイデアを得ようとしています。専門知識やライブラリ、たとえば組み合わせ最適化を開発する場合、プログラミングジョブの一部としてそれをどこで使用できますか? 個人アカウントはありますか?

2
高速タグ検索のアルゴリズム
問題は次のとおりです。 単純なエンティティEのセットがあり、各エンティティにはタグTのセットが添付されています。各エンティティには、任意の数のタグを付けることができます。エンティティの総数は1億に近く、タグの総数は約5000です。 したがって、初期データは次のようになります。 E1 - T1, T2, T3, ... Tn E2 - T1, T5, T100, ... Tk .. Ez - T10, T12, ... Tl この初期データが更新されることはほとんどありません。 どういうわけか、私のアプリは次のようなタグで論理式を生成します。 T1&T2&T3 | (T5&!T6) 私がする必要があるのは、与えられた表現に一致するエンティティの数を計算することです(注-エンティティではなく、単に数)。もちろん、これは完全に正確ではありません。 私が今持っているのは、単一のスレッドで5〜10秒の実行時間を与える単純なメモリ内テーブル検索です。 私は興味がありますが、このようなものを処理する効率的な方法はありますか?どのアプローチをお勧めしますか?このための一般的なアルゴリズムやデータ構造はありますか? 更新 要求に応じて少し説明します。 Tオブジェクトは実際には比較的短い定数文字列です。しかし、実際には問題ではありません-常にいくつかのIDを割り当てて整数を操作できます。 間違いなくソートできます。

4
アプリケーションは電力消費に大きな影響を及ぼしますか?
単一の汎用アプリケーションで、実行中のデバイスの電力消費に影響を与えることができるものはありますか? 個々のアプリケーションの最適化が一般的な方法で消費電力にどのように影響するかについてよく知らないのですが、アプリケーションを作成するさまざまなアプローチが実行中のデバイスの消費電力に影響するかどうかを誰かが説明できますか? つまり、機能的にまったく同じことを行い、さまざまな方法で記述された単一のプログラムがデバイスの電力消費に大きく影響するのではなく、デバイスの電力消費に大きく影響します。

6
メモリのアライメントはどのくらい重要ですか?まだ重要ですか?
しばらくしてから、メモリアライメント、それがどのように機能し、どのように使用するかについて、多くのことを検索して読みました。私が今見つけた最も関連性の高い記事はこれです。 しかし、それでも私はまだそれについていくつかの質問があります: 組み込みシステムでは、コンピューターに大量のメモリが割り当てられていることが多く、メモリ管理の評論を減らすことができます。私は完全に最適化に取り組んでいますが、今では、同じプログラムを比較したり、メモリーの再配置と調整なしで? メモリアライメントには他の利点がありますか?私はどこかでCPUがアライメントされたメモリでより良く/より速く動作することを読んだのですが、それは処理するための命令をより少なくします(あなたの誰かがそれに関する記事/ベンチマークへのリンクを持っている場合)、その場合、違いは本当に重要ですか?これら2つ以上の利点がありますか? 第5章の記事リンクで、著者は次のように述べています。 注意:C ++では、構造体のように見えるクラスはこの規則に違反する可能性があります!(基本クラスと仮想メンバー関数の実装方法に依存するかどうかは、コンパイラーによって異なります。) この記事では主に構造について説明していますが、ローカル変数の宣言もこのニーズの影響を受けますか? C ++でメモリアラインメントが正確に機能する仕組みについて、何か違いがあるように思えますか? この前の質問には「アラインメント」という単語が含まれていますが、上記の質問に対する回答はありません。

5
クエリのために何千万ものオブジェクトを格納するための効率的な方法で、1秒あたりの挿入数が多いですか?
これは基本的に、p2pチャットネットワークでパケットの数をカウントし、パケットのタイプなどをカウントしているロギング/カウントアプリケーションです。これは、5分間で約400〜600万パケットに相当します。また、この情報の「スナップショット」のみを取得するため、5分ごとに5分以上経過したパケットのみを削除しています。したがって、このコレクションに含まれるアイテムの最大数は1,000万から1200万です。 異なるスーパーピアに300接続する必要があるため、各パケットが少なくとも300回挿入されようとしている可能性があります(おそらく、このデータをメモリに保持することが唯一の妥当なオプションである理由です)。 現在、私はこの情報を保存するために辞書を使用しています。しかし、大量のアイテムを保存しようとしているため、大きなオブジェクトヒープで問題が発生し、メモリの使用量は時間とともに継続的に増加します。 Dictionary<ulong, Packet> public class Packet { public ushort RequesterPort; public bool IsSearch; public string SearchText; public bool Flagged; public byte PacketType; public DateTime TimeStamp; } mysqlを使用しようとしましたが、挿入する必要があるデータ量に対応できませんでした(重複していないことを確認しながら)。それはトランザクションの使用中です。 私はmongodbを試しましたが、そのためのCPU使用は非常識で、どちらも保持しませんでした。 5分以上経過したすべてのパケットを削除し、このデータの「スナップショット」を取得するため、私の主な問題は5分ごとに発生します。LINQクエリを使用して、特定のパケットタイプを含むパケットの数をカウントしているため。また、データのdistinct()クエリを呼び出しています。ここでは、keyvaluepairのキーから4バイト(IPアドレス)を取り除き、keyvalupairのValueのrequestingport値と組み合わせて、それを使用して、すべてのパケットからのピア。 アプリケーションは現在、約1.1GBのメモリ使用量を保持しており、スナップショットが呼び出されると、使用量を2倍にまで増やすことができます。 これで、異常な量のRAMがあれば問題になりませんが、現在実行しているvmは2GBのRAMに制限されています。 簡単な解決策はありますか?

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