【发布时间】:2008-09-02 19:20:08
【问题描述】:
为什么我要在我的代码中使用一个而不是另一个?
【问题讨论】:
标签: c# .net reflection
为什么我要在我的代码中使用一个而不是另一个?
【问题讨论】:
标签: c# .net reflection
注意:这个答案似乎已经过时了。它是在 .NET 4 可用之前发布的,它显然引入了一些关于
Type的优化,因此使这个答案中的信息过时了。详情请见this more recent answer。
根据this blog post (from 2006) by Vance Morrison,RuntimeTypeHandle 是一个值类型(struct),它包装了一个非托管指针,所以Type.GetTypeHandle(obj).Equals(anotherHandle) 比obj.GetType().Equals(anotherType) 用于严格的“完全相同类型”比较更快——后者创建了System.Type 显然更重的实例。
但是,它也不太明显,并且肯定属于“微优化”类别,因此如果您想知道何时需要其中一个,您可能应该只使用 System.Type。
【讨论】:
在 .NET 4.0 Beta 1 中 RuntimeTypeHandle 只是包装 RuntimeType。
使用它作为廉价的Type 代理的所有好处似乎都消失了。
System.RuntimeTypeHandle type 表明,如今这种类型确实只是System.RuntimeType 的包装。 RuntimeTypeHandle 的假定性能优势在 .NET 4 中消失了。【讨论】: