.GetProperties()的大O

时间:2012-03-26 19:51:37

标签: c# reflection getproperties

如果有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();

.GetProperties()的时间复杂度,即Big-O是多少?考虑到有4个属性,这只需要4次迭代还是比它更复杂?或者,是否O(1)具有一些标准的复杂性来到列表 - 这似乎仍然是O(n)只是为了构建属性数组?

2 个答案:

答案 0 :(得分:3)

比这更复杂。该算法还必须包括基本类型链。此外,实现可能会缓存结果,因此固定成本实际上可能是O(1)。

但在实践中,反思总是很慢,所以你应该对你的应用进行概要分析并进行更改,直到达到你的性能目标。

答案 1 :(得分:3)

Big-O是渐近复杂度,换句话说O(n)仅与n的大值相关。
一个类永远不会有足够的属性来使它相关。

出于实际目的,你不妨考虑它O(1),但有一个非常大的常数。

这种问题以纳秒表示,而不是Big-O表示法。