Was ist der Unterschied zwischen RuntimeTypeHandle und Type?
-
09-06-2019 - |
Frage
Und warum sollte ich in meinem Code eines über dem anderen verwenden?
Lösung
Vorsicht:Diese Antwort scheint veraltet zu sein. Es wurde veröffentlicht, bevor .NET 4 verfügbar wurde, was offenbar einige Optimierungen in Bezug auf Folgendes mit sich brachte
Type
und machte damit die Informationen in dieser Antwort obsolet.Sehen diese neuere Antwort für Details.
Entsprechend dieser Blogbeitrag (aus dem Jahr 2006) von Vance Morrison, RuntimeTypeHandle
ist ein Werttyp (struct
), das einen nicht verwalteten Zeiger umschließt, also Type.GetTypeHandle(obj).Equals(anotherHandle)
lässt sich für strikte „Ist genau derselbe Typ“-Vergleiche schneller verwenden als obj.GetType().Equals(anotherType)
– Letzteres schafft System.Type
Exemplare, die offenbar schwerer sind.
Allerdings ist es auch weniger offensichtlich und fällt definitiv in die Kategorie „Mikrooptimierung“. Wenn Sie sich also fragen, wann Sie eines über dem anderen benötigen, sollten Sie wahrscheinlich einfach System.Type verwenden.
Andere Tipps
In .NET 4.0 Beta 1 RuntimeTypeHandle
einfach umwickelt RuntimeType
.Es scheint, dass es alle Vorteile bietet, es als günstiges Produkt zu verwenden Type
Proxy sind weg.
Beweis für die obige Behauptung:
- Microsofts Referenzquelle für die
System.RuntimeTypeHandle
Typ zeigt, dass dieser Typ tatsächlich nur eine Hülle istSystem.RuntimeType
heutzutage. - Sandro Magis Blogartikel aus dem Jahr 2013 „CLR:Die Kosten dynamischer Typtests“ enthält einen Benchmark und eine abschließende Anmerkung, die zeigt, dass die angeblichen Leistungsvorteile von
RuntimeTypeHandle
sind in .NET 4 verschwunden.