繁体   English   中英

Activator.CreateInstance和Activator.CreateInstance之间的区别<Type>

[英]difference between Activator.CreateInstance and Activator.CreateInstance<Type>

编写以下代码时,它们有什么区别:

MyClass parcel;
for (int i = 0; i < 100000000; i++) parcel = (MyClass)Activator.CreateInstance(typeof(MyClass));
for (int i = 0; i < 100000000; i++) parcel = Activator.CreateInstance<MyClass>();

我希望后者会更快,因为实际类型在编译时就已经知道,但是我没有任何区别。 在我的机器上,两者都可以在9秒左右的时间内工作。 那么考虑内部使用的步骤对他们有什么区别呢?

最简单地看一下源代码。

Activator.CreateInstance(type)调用Activator.CreateInstance(type, false); 以此实现(缩短版本):

RuntimeType rt = type.UnderlyingSystemType as RuntimeType;
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;

return rt.CreateInstanceDefaultCtor(!nonPublic, false, true, ref stackMark);

通用版本的实现(也缩短了)为:

RuntimeType rt = typeof(T) as RuntimeType;
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;

return (T)rt.CreateInstanceDefaultCtor(true, true, true, ref stackMark);

因此,唯一的区别是第二个布尔参数,其参数名称为skipCheckThis ,该参数是否进行一些较小的内部测试 因此,通用版本会稍快一些,因为它只是跳过了这些测试,但是您将无法真正衡量这些差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM