5

n 個のプロパティがある場合、.GetProperties O(n) の Big-O ですか、それとも複雑さを増すリフレクションに関与するプロセスがありますか?

この定義されたクラスがあるとします:

public class Reflector
{
 public string name { get; set; }
 public int number { get; set; }
 public bool flag { get; set; }
 public List<string> etc { get; set; }
}

そして、この呼び出しが行われます:

var reflect = new Reflector();
PropertyInfo[] properties = reflect.GetType().GetProperties();

の時間計算量、つまり Big-O は.GetProperties()? 4 つのプロパティがあることを考えると、これには 4 回の反復しかかからないのでしょうか、それともそれよりも複雑ですか? または、リストに到達するための標準的な複雑さのセットを備えた O(1) ですか?これは、プロパティ配列を構築するためだけに O(n) でなければならないと思われますか?

4

2 に答える 2

3

それよりも複雑です。アルゴリズムには、基本型チェーンも含める必要があります。さらに、実装は結果をキャッシュする可能性があるため、償却コストは実際には O(1) になる可能性があります。

しかし実際には、リフレクションは常に非常に遅いため、パフォーマンスの目標を達成するまで、アプリケーションをプロファイリングして変更を加える必要があります。

于 2012-03-26T19:54:12.637 に答える
3

Big-O は漸近的な複雑さに関するものです。つまり、O(n) は の大きな値にのみ関連しますn
クラスには、これを関連させるのに十分なプロパティがありません。

実際には、O(1) と見なすこともできますが、定数は非常に大きくなります。

この種の問題は、Big-O 表記ではなく、ナノ秒で表されます。

于 2012-03-26T19:55:17.180 に答える