В чем разница между RuntimeTypeHandle и Type?
-
09-06-2019 - |
Вопрос
И почему я должен использовать одно поверх другого в своем коде?
Решение
Внимание. Этот ответ устарел. Он был опубликован до того, как стал доступен .NET 4, что, по-видимому, привело к некоторой оптимизации в отношении
Type
и, таким образом, предоставило информацию. в этом ответ устарел. Подробнее см. этот более свежий ответ .
Согласно этой записи в блоге (с 2006 года) Vance Моррисон , RuntimeTypeHandle
- это тип значения ( struct
), который переносит неуправляемый указатель, поэтому Type.GetTypeHandle (obj) .Equals (anotherHandle)
быстрее использовать для строгого " точно такого же типа " сравнения чем obj.GetType (). Equals (anotherType)
& # 8212; последний создает экземпляры System.Type
, которые, по-видимому, тяжелее.
Однако это также менее очевидно и определенно подпадает под категорию «микрооптимизация». поэтому, если вам интересно, когда вам нужно одно поверх другого, вам, вероятно, следует просто использовать System.Type.
Другие советы
В .NET 4.0 Бета-версия 1 RuntimeTypeHandle
просто обертывает RuntimeType
.Кажется, все преимущества использования его в качестве дешевого Type
прокси-серверы исчезли.
Доказательства в пользу вышеуказанного утверждения:
- Компания Microsoft Справочный источник для
System.RuntimeTypeHandle
Тип показывает, что этот тип действительно является всего лишь оболочкой вокругSystem.RuntimeType
в наши дни. - Статья Сандро Маги в блоге 2013 года "CLR:Стоимость динамических типовых тестов"
содержит контрольный показатель и заключительное примечание, показывающее, что предполагаемые преимущества производительности
RuntimeTypeHandle
исчезли в .NET 4.