为什么我会在代码中使用一个而不是另一个?
警告:此答案似乎已过时.它是在.NET 4可用之前发布的,显然引入了一些优化
Type
,因此在这个答案中提供的信息已经过时了.有关详细信息,请参阅此最新答案.
根据Vance Morrison的这篇博文(2006年),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
显示这种类型确实只是System.RuntimeType
这些天的包装.
Sandro Magi的2013年博客文章"CLR:动态类型测试的成本"
包含一个基准测试和一个最终说明,显示RuntimeTypeHandle
在.NET 4中已经失去了所谓的性能优势.