И почему я должен использовать один из них в моем коде?
В чем разница между RuntimeTypeHandle и Type?
Ответ 1
Внимание: этот ответ кажется устаревшим. Он был опубликован до того, как появился .NET 4, который, по-видимому, ввел некоторые оптимизации в отношении
Type
и, таким образом, предоставил информацию в этом ответе устаревшей. Подробнее см. этот более поздний ответ.
Согласно этот пост в блоге (с 2006 года) Vance Morrison, RuntimeTypeHandle
- это тип значения (struct
), который обертывает неуправляемый указатель, поэтому Type.GetTypeHandle(obj).Equals(anotherHandle)
быстрее использовать для строгого сравнения "точно такого же типа", что obj.GetType().Equals(anotherType)
— последний создает экземпляры System.Type
, которые, по-видимому, более тяжелые.
Однако он также менее очевидный и определенно подпадает под категорию "микро-оптимизация", поэтому, если вам интересно, когда вам это нужно, вы должны просто использовать System.Type.
Ответ 2
В .NET 4.0 Beta 1 RuntimeTypeHandle
просто обертывается RuntimeType
.
Кажется, все преимущества использования этого как дешевого прокси-сервера Type
ушли.
Доказательства для вышеуказанного утверждения:
- Microsoft Справочный источник для типа
System.RuntimeTypeHandle
показывает, что этот тип действительно только обертка вокругSystem.RuntimeType
в эти дни. - Статья в блоге Sandro Magi 2013 "CLR: стоимость динамических тестов типа" содержит контрольный показатель и заключительную заметку о том, что предполагаемые преимущества производительности
RuntimeTypeHandle
исчезли в .NET 4.