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 回答