簡體   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