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(), 真的是日了狗了.

把代码改成

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

然后只比new object慢了四五倍…

posted @ 2017-08-29 17:58 egmkang 阅读(...) 评论(...) 编辑 收藏