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
慢了四五倍…