如果有n个属性,那么.GetProperties的大O是否为O(n),或者反射中是否涉及增加复杂性的进程?
假设有这样一个定义的类:
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()
的时间复杂度是多少?考虑到有4个属性,这只需要4次迭代,还是更复杂?或者,它是O(1)和一些标准的复杂性集,以获得列表-这似乎仍然是O(n),仅仅是为了构建属性数组?
发布于 2012-03-27 03:55:17
Big-O是关于渐近复杂性的,换句话说,O(n)只与较大的n
值相关。
一个类永远不会有足够的属性来使其相关。
出于实际目的,您也可以考虑它为O(1),但需要一个非常大的常量。
这类问题是以纳秒表示的,而不是大O符号。
发布于 2012-03-27 03:54:13
比这复杂得多。此外,实现可能会缓存结果,因此摊销成本实际上可能是O(1)。
但在实践中,反射总是相当慢的,所以您可能应该分析您的应用程序并进行更改,直到您达到性能目标。
https://stackoverflow.com/questions/9878743
复制相似问题