質問

ゆがみは - 次の2つの方法のどれが最もパフォーマンスがありますか
目標 - タイプラッパーのオブジェクトを取得します(以下に定義)
基準 - ストレージの速度
番号。記録の - 約1000〜2000、最大約6k
選択 - その場でオブジェクトを作成するか、辞書からルックアップを実行します
実行速度-1秒あたりのX時間と呼ばれます

NB-最初に作業コードを配信してから最適化に進む必要があります。したがって、理論家が舞台裏情報を垣間見ることができる場合は、おそらくEod Thuによって実際のパフォーマンステストに到達する前に役立ちます。

定義 -

class Wrapper  
{  
   public readonly DataRow Row;  
   public Wrapper(DataRow dr)  
   {  
      Row = dr;  
   }  
   public string ID { get { return Row["id"].ToString(); } }  
   public string ID2 { get { return Row["id2"].ToString(); } }  
   public string ID3 { get { return Row["id3"].ToString(); } }  
   public double Dbl1 { get { return (double)Row["dbl1"]; } }  
   // ... total about 12 such fields !  
}  
Dictionary<string,Wrapper> dictWrappers;  

方法1

Wrapper o = new Wrapper(dr);  
/// some action with o
myMethod( o );

方法2

Wrapper o;    
if ( ! dictWrappers.TryGetValue( dr["id"].ToString(), out o ) )    
{    
    o = new Wrapper(dr);    
    dictWrapper.Add(o.ID, o);    
}    

/// some action with o    
myMethod( o );    
役に立ちましたか?

解決

最初のものはより速くなります。実際にはルックアップを行っていないため、単純な割り当てと割り当てを行うだけです。

コードの2つのセグメントは、ほぼ同等ではありません。ただし、機能では、方法1が多くの複製を作成できるためです。

他のヒント

  1. 最初にプロファイリングせずに最適化しないでください。
  2. コードが仕様/期待を満たさない限り、プロファイルしないでください。
  3. このコードをプロファイルする必要がある場合は、両方の方法を書き込み、予想される負荷でベンチマークしてください。

編集:パフォーマンスが受け入れられない限り、最適化よりも以下を支持しようとします。

  • シンプルさ
  • 読みやすさ
  • 保守性
  • テスト可能性

私は(最近)デバッグが非常に困難な非常に最適化されたコードを見ました。私はそれを単純化するためにそれをリファクタリングし、その後パフォーマンステストを実行しました。パフォーマンスは受け入れられなかったので、私はそれをプロファイルし、ボトルネックを見つけ、それらのみを最適化しました。パフォーマンステストを再実行し、新しいコードは高度に最適化されたバージョンに匹敵しました。そして、今では維持がはるかに簡単になりました。

これが無料です プロファイリングツール.

実際にテストしないと、ラッパーのフィールド値をキャッシュすること(つまり、すべてのトストリングコールとキャストを避ける)は、おそらくパフォーマンスに大きな影響を与えると予想されます。

その後、これらの値をキャッシュすると、頻繁に再作成するのではなく、ラッパーのインスタンスを維持したいと思うでしょう。

あなたがそうだと仮定して 本当 PER(ねえ、それが起こる)を心配して、あなたの根底にあるラッパー自体が改善される可能性があります。あなたは文字列ごとにフィールドルックアップをしています。同じフィールドが行に設定されている場合、コールをたくさん行う場合は、実際には序数をキャッシュして順序で検索する方が速いです。

もちろん、これは本当にパフォーマンスを心配する必要がある場合にのみ、これが違いを生むインスタンスはかなりまれです(埋め込まれたデバイスでは、デスクトップほど珍しくありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top