אז פעם שעברה גילינו שnew T() משתמש מאחורי הקלעים בפונקציה Activator.CreateInstance
השוואתי שלוש צורות של הקצאת אובייקט פשוט: הראשונה היא דרך פונקציה שקוראת לConstructor הדיפולטי שלו, השנייה היא ע”י קריאה לפונקציה גנרית עם Constraint של where T : new() וקריאה לnew T(). השלישית היא ע”י Activator.CreateInstance.
התוצאות לפניכם: (הזמן נמדד במילישניות)
Number of objects | new Constructor | new T() | Activator.CreateInstance |
---|---|---|---|
10000 | 0 | 1 | 1 |
100000 | 1 | 14 | 16 |
1000000 | 17 | 142 | 166 |
10000000 | 191 | 1435 | 1655 |
100000000 | 1773 | 14379 | 16757 |
המסקנה היא שnew T() שמשתמש בActivator.CreateInstance
שימו לב שזה גם דורש מספר גדול של אובייקטים כדי לשים לב לזה, כך שזה לא נורא, אם אתם לא צריכים להתמודד עם קצבים/כמויות גדולות של יצירות כאלה.
המשך יום מהיר טוב.