323. Comparing new T() with other methods

אז פעם שעברה גילינו שnew T() משתמש מאחורי הקלעים בפונקציה Activator.CreateInstance(). ראיתי שיש לה מימוש שונה לחלוטין מהמימוש של 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() הוא יותר טוב מActivator.CreateInstance, אבל פחות טוב (בהרבה) מקריאה לConstructor הדיפולטי.

שימו לב שזה גם דורש מספר גדול של אובייקטים כדי לשים לב לזה, כך שזה לא נורא, אם אתם לא צריכים להתמודד עם קצבים/כמויות גדולות של יצירות כאלה.

המשך יום מהיר טוב.

שתף