我有一个应用程序,它现在正在使用基本反射来获取类。
Type type = Type.GetType(mynamespace.myclassname);
object o = System.Activator.CreateInstance(type);
我想看看反射的运行效率有多高,所以我用这种方式生成了大约150000个对象,看看性能是否下降,性能是否快速稳定。
然而,这让我思考:根据传递到GetType()方法中的类的大小和复杂性,对Type.GetType()的调用是否真的会减慢?
例如:假设我们想使用GetType()来检索一个由30个私有变量、30个私有方法和30个公共方法组成的复杂类,而这个类只有一个非常简单的公共Add(int,int)方法,该方法将两个数字相加。
如果传入的类是复杂类而不是简单类,那么Type.GetType的速度会显著减慢吗?
感谢
根据我对事物的理解,(我只是一个经验丰富的程序员,我不是该语言的创建者之一)所引用的类的复杂性丝毫不会影响GetType()
的性能。
实例化类的复杂性当然会影响CreateInstance()
的性能,但这是意料之中的:类越大,包含的东西越多,需要执行的代码就越多,才能完全构建它
也许你混淆了GetType()
和CreateInstance()
,因为我注意到你说"当实例化复杂类和简单类时,Type.GetType会显著减慢吗?"而事实上GetType()
不会实例化任何东西,CreateInstance()
会。
加载类型时,将创建适合您的类型的Type对象实例。这个(一次性的)过程显然会或多或少地昂贵,这取决于实现的类型。
在此之后,对GetType()的调用将为您提供一个对这个现成实例的引用,因此不会随着时间或复杂性的推移而减弱。