egmkang 服务端开发工程师

C#泛型创建实例

2016-09-04
C#

class Test<T> where T : new()
{
  public static T Instance()
  {
    return new T();
  }
}

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

把代码改成

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

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


Comments