問題タブ [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.

0 投票する
28 に答える
330836 参照

java - Java で Map 値をインクリメントする最も効率的な方法

この質問がこのフォーラムにとって基本的すぎると見なされないことを願っていますが、見ていきます。何度も実行されるパフォーマンスを向上させるために、一部のコードをリファクタリングする方法を考えています。

Map (おそらく HashMap) を使用して単語頻度リストを作成しているとします。ここで、各キーはカウントされる単語を含む文字列であり、値は単語のトークンが見つかるたびにインクリメントされる整数です。

Perl では、このような値をインクリメントするのは簡単です:

しかし、Java では、それははるかに複雑です。ここで私が現在やっている方法:

もちろん、これは新しい Java バージョンのオートボクシング機能に依存しています。そのような値をインクリメントするより効率的な方法を提案していただけないでしょうか。Collections フレームワークを避けて、代わりに何か他のものを使用するための良いパフォーマンス上の理由はありますか?

更新:いくつかの回答のテストを行いました。下記参照。

0 投票する
9 に答える
2278 参照

c++ - ベクトルをマージするためのアルゴリズムのヘルプ

次のタスクには非常に高速なアルゴリズムが必要です。私はすでにそれを完成させるいくつかのアルゴリズムを実装していますが、それらはすべて私が必要とするパフォーマンスに対して遅すぎます. 最新の CPU でアルゴリズムを少なくとも 1 秒間に 100,000 回実行できるほど高速である必要があります。C++ で実装されます。

線上に開始座標と終了座標を持つ構造であるスパン/範囲を使用しています。

スパンの 2 つのベクトル (動的配列) があり、それらをマージする必要があります。1 つのベクトルは src で、もう 1 つのベクトルは dst です。ベクトルはスパン開始座標でソートされ、スパンは 1 つのベクトル内でオーバーラップしません。

src ベクトルのスパンは dst ベクトルのスパンとマージする必要があります。これにより、結果のベクトルがソートされ、オーバーラップがなくなります。すなわち。マージ中にオーバーラップが検出された場合、2 つのスパンが 1 つにマージされます。(2 つのスパンのマージは、構造内の座標を変更するだけの問題です。)

ここで、もう 1 つ問題があります。マージ中に src ベクトルのスパンを「拡張」する必要があります。これは、src 内のすべてのスパンの開始座標に定数が追加され、別の (より大きな) 定数が終了座標に追加されることを意味します。これは、src スパンが拡張された後にオーバーラップする可能性があることを意味します。


私がこれまでに到達したことは、完全にその場で行うことはできず、何らかの一時的な保管が必要であるということです. 合計された src と dst の要素数に対して線形時間で実行できるはずだと思います。

一時ストレージは、おそらくアルゴリズムの複数の実行間で共有できます。

私が試した 2 つの主なアプローチは遅すぎますが、次のとおりです。

  1. src のすべての要素を dst に追加し、追加する前に各要素を拡張します。次に、インプレース ソートを実行します。最後に、「読み取り」および「書き込み」ポインターを使用して結果のベクターを反復処理します。読み取りポインターは書き込みポインターの前に実行され、スパンが進むにつれてマージされます。すべての要素がマージされると (読み取りポインターが end に達すると)、dst は切り捨てられます。

  2. 一時的な作業ベクトルを作成します。src または dst から次の要素を繰り返し選択し、work-vector にマージすることにより、上記の単純なマージを実行します。完了したら、work-vector を dst にコピーして置き換えます。

最初の方法には、ソートが O(m+n) ではなく O((m+n)*log(m+n)) であり、多少のオーバーヘッドがあるという問題があります。また、dst ベクトルが実際に必要とするよりもはるかに大きくなる必要があることも意味します。

2番目には、大量のコピーとメモリの割り当て/割り当て解除という主な問題があります。

スパン/ベクターの保存/管理に使用されるデータ構造は、必要に応じて変更できます。

更新: データセットの大きさを言い忘れました。最も一般的なケースは、いずれかのベクトルの要素が 4 ~ 30 で、dst が空であるか、src と dst のスパン間に大量の重複があります。

0 投票する
3 に答える
1897 参照

sql-server - CPU/メモリなどのデータベース固有のパフォーマンス メトリックを取得するにはどうすればよいですか。SQL Server 2005 では?

共有 SQL Server 2005 クラスター インスタンス上にいくつかのデータベースがあり、それらのパフォーマンス メトリックが必要です。非常に長時間実行されるプロセスがいくつかあり、不十分なハードウェアではなく、コードの非効率性が原因であると思われます。

データベース ハードウェアが原因である可能性を除外できるように、これらのパフォーマンス メトリックを取得する何らかの方法が必要です。

0 投票する
15 に答える
21462 参照

c++ - 関数呼び出しのコストはいくらですか?

に比べ

  • シンプルなメモリアクセス
  • ディスクアクセス
  • 別のコンピュータ (同じネットワーク上) でのメモリ アクセス
  • 別のコンピュータ (同じネットワーク上) でのディスク アクセス

Windows 上の C++ で。

0 投票する
6 に答える
26775 参照

mysql - SQL クエリの長​​さに対する実質的な制限 (特に MySQL)

大量の (潜在的に冗長な) WHERE 句を含む非常に大きな SQL クエリを使用することは特に悪いことですか?

たとえば、すべてをオフにして Web アプリケーションから生成したクエリを次に示します。これは、このプログラムが生成できる最大のクエリになるはずです。

十分に機能しているように見えますが、特にトラフィックが多いわけでもありません (1 日に数百ヒット程度)。クエリを最適化して冗長性などを取り除く努力をする価値があるかどうか疑問に思います。

0 投票する
16 に答える
29981 参照

c++ - 初期化されていないストレージを含む STL ベクトル?

struct連続したストレージに sを配置する必要がある内部ループを作成しています。structこれらの s がいくつになるかは、事前にわかりません。私の問題は、STL がvectorその値を 0 に初期化することです。そのため、何をしても、初期化のコストと、structのメンバーを値に設定するコストが発生します。

初期化を防ぐ方法はありますか、またはサイズ変更可能な連続したストレージと初期化されていない要素を備えた STL のようなコンテナーがありますか?

(コードのこの部分は最適化する必要があると確信しており、初期化にはかなりのコストがかかると確信しています。)

また、初期化がいつ行われるかについての説明については、以下の私のコメントを参照してください。

いくつかのコード:

0 投票する
8 に答える
74638 参照

c++ - std::map挿入またはstd::map検索?

既存のエントリを保持したいマップを想定しています。20% の確率で、挿入するエントリは新しいデータです。返されたイテレータを使用して std::map::find を実行してから std::map::insert を実行する利点はありますか? それとも、挿入を試みてから、反復子がレコードが挿入されたかどうかを示しているかどうかに基づいて処理するほうが速いですか?

0 投票する
23 に答える
123018 参照

c++ - if-else ステートメントの切り替えの利点

ステートメントswitchを使用する場合とステートメントを使用する場合のベスト プラクティスは何ですか? パフォーマンスとスペースを考慮する必要がありますが、重要ではありません。私はスニペットを抽象化したので、命名規則について私を嫌わないでください.ifunsigned

switch声明:

if声明:

0 投票する
2 に答える
2539 参照

wcf - WCF - サービス内で FaultExceptions をスローするオーバーヘッド

サービス間でビジネス ルールをやり取りするためにメッセージと障害の例外を使用する方法について質問を投稿しました。

この例外をネットワーク経由でスローするためにオーバーヘッドが発生するという印象を受けましたが、シリアル化および逆シリアル化されるのは単なるメッセージであることを考えると、それらは実際にはまったく同じものでした。

しかし、これにより、一般的に例外をスローすること、またはより具体的には FaultExceptions をスローすることについて考えるようになりました。

今、私のサービス内で、私が使用する場合

「あなたのアカウントはアクティブ化されていません」のような単純なビジネス ルールを伝えるために、これによりどのようなオーバーヘッドが発生しますか? .NET で通常の例外をスローするのと同じオーバーヘッドですか? または、WCF サービスは、フォールト コントラクトを使用してこれらをより効率的に処理しますか。

したがって、私のユーザーの例では、これがサービスメソッドを記述するための最適な/推奨される方法です

オプション a

オプションb

0 投票する
6 に答える
5237 参照

java - HTTPサーブレットコンテナの最大スレッド数を選択するにはどうすればよいですか?

Jettyで(ブロッキングIOを使用して)サーブレットとして実行されるRESTfulWebサービスを開発しています。最大スレッドの最適な設定を見つけるのは難しいようです。

セットアップの残りの部分のいくつかの簡単に測定可能な特性からスレッドの最大数を決定するための研究された公式はありますか?