Qual é a diferença entre RuntimeTypeHandle e escrever?
-
09-06-2019 - |
Pergunta
E por que eu iria usar um sobre o outro no meu código?
Solução
Atenção:Esta resposta parece estar fora de data. Ele foi postado antes .NET 4 tornou-se disponível, o que, aparentemente, introduziu algumas otimizações em relação
Type
e assim tornou a informação neste resposta obsoletos.Ver este mais recente resposta para obter detalhes.
De acordo com a este post do blog (a partir de 2006) por Vance Morrison, RuntimeTypeHandle
é um tipo de valor (struct
) que envolve um ponteiro não gerenciado, de forma Type.GetTypeHandle(obj).Equals(anotherHandle)
é mais rápido usar estrita "é exatamente o mesmo tipo de" comparações de obj.GetType().Equals(anotherType)
— o último cria System.Type
instâncias que são, aparentemente, mais pesado.
No entanto, também é menos óbvia, e, definitivamente, cai sob a categoria de "micro-otimização" então, se você está se perguntando quando você precisar de um sobre o outro, provavelmente, você deve apenas usar o Sistema.Escreva.
Outras dicas
Em .NET 4.0 Beta 1 RuntimeTypeHandle
apenas encapsula RuntimeType
.Parece que todos os benefícios de usá-la como uma barata Type
proxy ter ido.
Evidência para a reivindicação acima:
- Microsoft Fonte de referência para a
System.RuntimeTypeHandle
tipo mostra que este tipo de fato é apenas um wrapper em torno deSystem.RuntimeType
nos dias de hoje. - Sandro dos reis Magos 2013 artigo do blog "CLR:O Custo da Dinâmica de Testes de Tipo"
contém uma referência e uma nota final, mostrando que os supostos benefícios de desempenho de
RuntimeTypeHandle
são entrado .NET 4.