1

2 つの質問があります。

1) 私は、パフォーマンスとメモリ消費に関して十分に健全なコードを理解するという点で、専門家の見解が必要です。

2) パフォーマンスとメモリ消費に関して、次のコードの良し悪しとその理由は?

最大になる可能性のあるカウンターを 100 ずつインクリメントし、次のようなコードを記述する必要があります。

サンプルコードは次のとおりです。

for(int i=0;i=100;i++)
{
     いくつかのコード
}

for(長い i=0;i=1000;i++)
{
     いくつかのコード
}

要件が同じであれば、intの代わりにInt16などを使用するのがどれほど良いか。

4

3 に答える 3

5

最大になる可能性のあるカウンターを 100 ずつインクリメントし、次のようなコードを記述する必要があります。

与えられたオプション:

for(int i=0;i=100;i++)

for(long i=0;i=1000;i++)

編集:前述のように、中間の式が type の式ではなく代入であるため、これらのどちらも実際にはコンパイルされませんbool

これは非常に重要な点を示しています: コードを高速化する前に、コードを機能させてください。あなたの2つのループは同じことをしません.1つは上限が1000で、もう1つは上限が100です.「高速」と「正しい」のどちらかを選択する必要がある場合は、ほとんどの場合「正しい"。(もちろん、これには例外がありますが、それは通常、コードの正確さではなく、大量のデータにわたる結果の絶対的な正確さに関するものです。)

ここで変数の型を変更しても、測定可能な違いが生じる可能性はほとんどありません。これは、マイクロ最適化の場合によくあります。パフォーマンスに関して言えば、通常、アーキテクチャはメソッド内の最適化よりもはるかに重要です。また、後で変更するのもはるかに困難です。一般に、次のことを行う必要があります。

  • データを最も正確かつ簡単に表す型を使用して、できる限りクリーンなコードを記述します
  • 妥当なパフォーマンス要件を決定する
  • クリーンな実装を測定する
  • 十分に機能しない場合は、プロファイリングなどを使用して改善方法を見つけます
于 2012-08-03T06:18:42.403 に答える
0

反復を表す数または何かの量を必要とすることを行うときは、別の型を使用する十分なセマンティックなint理由がない限り、常に使用する必要があります(つまり、データが負になることは決してないか、または 2^ より大きい可能性があります)。 31)。さらに、この種のナノ最適化の問題について心配することは、C# コードを作成する際には基本的に問題になりません。

そうは言っても、このようなことの違い (4 バイト レジスタをインクリメントする場合と 8 バイトをインクリメントする場合) について疑問がある場合は、Mr. Agner の素晴らしい命令テーブルをいつでも参照できます。

Amd64 マシンでは、インクリメントにはインクリメントlongと同じ時間がかかりますint。**

32 ビット x86 マシンでは、インクリメントintにかかる時間が短くなります。

** 値がメモリにバインドされていてアライメントされていない限り、ほとんどすべての論理演算と数学演算に同じことが当てはまります。.NET では、alongは常に整列されるため、この 2 つは常に同じになります。

于 2012-08-03T06:24:23.867 に答える
0
DateTime dtStart = DateTime.Now;


for(int i=0;i=10000;i++)
{
     Some Code
}

response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString());

Long についても同じ方法で、どちらが優れているかを知ることができます... ;)

于 2012-08-03T06:16:53.560 に答える