如果有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)只是为了构建属性数组?
答案 0 :(得分:3)
比这更复杂。该算法还必须包括基本类型链。此外,实现可能会缓存结果,因此固定成本实际上可能是O(1)。
但在实践中,反思总是很慢,所以你应该对你的应用进行概要分析并进行更改,直到达到你的性能目标。
答案 1 :(得分:3)
Big-O是渐近复杂度,换句话说O(n)仅与n
的大值相关。
一个类永远不会有足够的属性来使它相关。
出于实际目的,你不妨考虑它O(1),但有一个非常大的常数。
这种问题以纳秒表示,而不是Big-O表示法。