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

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

2
含まれていない場合に例外をキャッチするよりも、辞書にキーが含まれているかどうかをチェックする方が速いのはなぜですか?
コードを想像してください: public class obj { // elided } public static Dictionary<string, obj> dict = new Dictionary<string, obj>(); 方法1 public static obj FromDict1(string name) { if (dict.ContainsKey(name)) { return dict[name]; } return null; } 方法2 public static obj FromDict2(string name) { try { return dict[name]; } catch (KeyNotFoundException) { return null; …

2
ソートされた配列の処理がソートされていない配列よりも遅いのはなぜですか?
Tuple<long,long,string>単純な「間」の検索を実行する500000個のランダムに生成されたオブジェクトのリストがあります。 var data = new List<Tuple<long,long,string>>(500000); ... var cnt = data.Count(t => t.Item1 <= x && t.Item2 >= x); ランダムな配列を生成し、ランダムに生成された100個のの値に対して検索を実行すると、検索xは約4秒で完了します。並べ替えが検索に与える大きな驚異を知っていたため、100回の検索を実行する前に、データを最初にItem1、次にItem2、最後にの順に並べ替えることにしましたItem3。分岐予測のため、ソートされたバージョンのパフォーマンスが少し速くなることを期待していました:のポイントに到達するとItem1 == x、のすべてのチェックでt.Item1 <= x分岐が「ノーテイク」と正しく予測され、のテール部分が高速になると考えていました探す。驚いたことに、ソートされた配列の検索には2倍の時間がかかりました。 実験を実行する順序を切り替えてみて、乱数ジェネレーターに別のシードを使用しましたが、効果は同じです。並べ替えられていない配列での検索は、同じ配列での検索のほぼ2倍の速度で実行されましたが、ソートされました! 誰かがこの奇妙な効果をうまく説明していますか?私のテストのソースコードは次のとおりです。.NET 4.0を使用しています。 private const int TotalCount = 500000; private const int TotalQueries = 100; private static long NextLong(Random r) { var data = new byte[8]; …

12
'var'を使用するとパフォーマンスに影響がありますか?
以前、私はなぜvarキーワードが多くの例で見られるのかについて質問しましたが、匿名型にのみ必要であるにもかかわらず、それでもコードを「より速く」/「より簡単に」書くために使用されるという答えを得ました。 続いて、このリンク(「C#3.0 -ヴァールされていないOBJEC」) IソーvarIL内の正しい種類までコンパイルされる(あなたは記事下のほぼ中間に表示されます)。 私の質問は、もしあれば、ILコードがvarキーワードtake をどれだけ使用するかであり、どこで使用しても、コードのパフォーマンスを測定可能なレベルに近づけることになるでしょうか?
230 c#  performance  variables  var 


2
240以上の要素を持つ配列をループするときにパフォーマンスに大きな影響があるのはなぜですか?
Rustの配列に対して合計ループを実行すると、CAPACITY> = 240のときにパフォーマンスが大幅に低下することに気付きました。CAPACITY= 239は約80倍高速です。 Rustが「短い」配列に対して行っている特別なコンパイル最適化はありますか? でコンパイルrustc -C opt-level=3。 use std::time::Instant; const CAPACITY: usize = 240; const IN_LOOPS: usize = 500000; fn main() { let mut arr = [0; CAPACITY]; for i in 0..CAPACITY { arr[i] = i; } let mut sum = 0; let now = Instant::now(); for _ in …

30
再帰か反復か?
両方で同じ目的を果たすことができるアルゴリズムで、再帰ではなくループを使用した場合、またはその逆の場合、パフォーマンスに影響がありますか?例:指定された文字列が回文かどうかを確認します。多くのプログラマーが再帰を使用して、単純な反復アルゴリズムがうまく機能する時期を自慢する方法を見てきました。コンパイラーは、何を使用するかを決定する上で重要な役割を果たしますか?


4
役に立たないMOV命令を導入すると、x86_64アセンブリでタイトなループが加速するのはなぜですか?
バックグラウンド: 組み込みアセンブリ言語を使用して一部のPascalコードを最適化しているときに、不要なMOV命令に気づき、それを削除しました。 驚いたことに、不要な命令を削除すると、プログラムの速度が低下しました。 任意の、役に立たないMOV命令を追加すると、パフォーマンスがさらに向上することがわかりました。 効果は不安定で、実行順序に基づいて変化します。同じジャンク命令が1行で上または下に転置されると、速度が低下します。 CPUがあらゆる種類の最適化と合理化を行うことを理解していますが、これはより黒魔術のように見えます。 データ: 私のコードのバージョンは、時間を実行するループの途中で3つのジャンク操作を条件付きでコンパイルします2**20==1048576。(周囲のプログラムはSHA-256ハッシュを計算するだけです)。 私のかなり古いマシン(Intel(R)Core(TM)2 CPU 6400 @ 2.13 GHz)での結果: avg time (ms) with -dJUNKOPS: 1822.84 ms avg time (ms) without: 1836.44 ms プログラムはループで25回実行され、実行順序は毎回ランダムに変化しました。 抜粋: {$asmmode intel} procedure example_junkop_in_sha256; var s1, t2 : uint32; begin // Here are parts of the SHA-256 algorithm, in Pascal: // …


3
512x512の行列の転置が、513x513の行列の転置よりもはるかに遅いのはなぜですか?
異なるサイズの正方行列でいくつかの実験を行った後、パターンが思い付きました。常に、サイズの行列の転置は、サイズの行列の2^n転置よりも遅くなります2^n+1。の値が小さい場合n、違いは重要ではありません。 ただし、値が512を超えると大きな違いが生じます。(少なくとも私にとっては) 免責事項:要素の二重交換のため、関数が実際に行列を転置しないことは知っていますが、違いはありません。 コードに従います: #define SAMPLES 1000 #define MATSIZE 512 #include <time.h> #include <iostream> int mat[MATSIZE][MATSIZE]; void transpose() { for ( int i = 0 ; i < MATSIZE ; i++ ) for ( int j = 0 ; j < MATSIZE ; j++ ) { int aux = mat[i][j]; …

12
Goはどのようにすばやくコンパイルするのですか?
私はGodを使ってGoのウェブサイトをあちこち調べましたが、Goの異常なビルド時間の説明を見つけることができません。それらは言語機能(またはその欠如)の製品、高度に最適化されたコンパイラ、または何か他のものですか?私は囲碁を宣伝するつもりはありません。気になるだけです。


24
String vs. StringBuilder
StringとStringBuilder(StringBuilder変更可能)の違いは理解していますが、2つのパフォーマンスに大きな違いはありますか? 私が取り組んでいるプログラムには、大文字と小文字が区別される文字列の追加(500以上)がたくさんあります。StringBuilderより良い選択を使用していますか?
215 c#  .net  performance 

13
パフォーマンスが重要な場合、JavaのString.format()を使用する必要がありますか?
ログ出力などのために、常に文字列を構築する必要があります。JDKバージョンでStringBufferは、(多くの追加、スレッドセーフ)とStringBuilder(多くの追加、非スレッドセーフ)をいつ使用するかを学びました。 使用についてのアドバイスは何String.format()ですか?それは効率的ですか、またはパフォーマンスが重要なワンライナーの連結に固執する必要がありますか? 例えば醜い古いスタイル、 String s = "What do you get if you multiply " + varSix + " by " + varNine + "?"; 整頓された新しいスタイル(String.format、おそらく遅い)、 String s = String.format("What do you get if you multiply %d by %d?", varSix, varNine); 注:私の具体的な使用例は、コード全体で何百もの「ワンライナー」ログ文字列です。彼らはループを含まないので、StringBuilderヘビー級です。String.format()特に興味があります。

11
JavaScript変数はループの外側または内側を宣言しますか?
AS3では、パフォーマンスを向上させるために、ループの外側ですべての変数を初期化する必要があると思います。これはJavaScriptにも当てはまりますか?どちらが良い/速い/ベストプラクティスですか? var value = 0; for (var i = 0; i < 100; i++) { value = somearray[i]; } または for (var i = 0 ; i < 100; i++) { var value = somearray[i]; }

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