Type.GetType()会根据要检索的对象的大小和复杂性而减慢吗?

Mat*_*att 9 c# reflection

我有一个应用程序,今天使用基本反射来抓取类.

Type type = Type.GetType(mynamespace.myclassname);
object o = System.Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

我想看看反射运行的效率如何,所以我以这种方式生成了大约150,000个对象,以查看性能是否会降低,性能是否快速稳定.

但是,这让我想到:根据传递给GetType()方法的类的大小和复杂性,对Type.GetType()的调用是否会减慢?

例如:假设我们想要使用GetType()来检索由30个私有变量,30个私有方法和30个公共方法组成的复杂类,而不是只有一个非常简单的公共Add(int,int)方法的类.两个数字.

如果传入的类是复杂类而不是简单类,Type.GetType会显着减慢吗?

谢谢

Mik*_*kis 7

根据我对事物的理解,(我只是一个经验丰富的经验丰富的程序员,我不是该语言的创造者之一),被引用的类的复杂性不会以任何方式影响其性能GetType().

实例化类的复杂性当然会影响性能CreateInstance(),但这是预期的:类越大,它包含的东西越多,为了完全构造它就需要执行的代码越多.

也许你感到困惑GetType()CreateInstance(),因为我注意到你说"将Type.GetType实例化复杂的类与简单的类时放慢显著?" 实际上GetType()并没有实例化任何东西CreateInstance().


Eug*_*eck 5

在加载类型时,将创建适合您的类型的Type对象的实例.这种(一次性)过程显然会或多或少地取决于类型实现.

在此之后,对GetType()的调用将为您提供对这个易于准备的实例的引用,因此不会随着时间或复杂性进行去除.