C#泛型建立实例

1 class Test<T> where T : new()
2 {
3   public static T Instance()
4   {
5     return new T();
6   }
7 }

就上面这方法, 竟然比new object慢了几十倍(在x86和x64上面表现不一), 我当时就惊呆了, 后来研究一番才发现, new T()被翻译成System.Activator.CreateInstance(), 真的是日了狗了.spa

把代码改为翻译

1 public static Fun<T> Instance = Expression.Lambda<Func<T>>(Expression.New(typeof(T))).Compile()

而后只比new object慢了四五倍…code

相关文章
相关标签/搜索