En el primer ejemplo de log4net configuration manual el autor usa typeof(MyApp)
para obtener el tipo de la clase que contiene MyApp
. ¿Hay alguna razón para no usar this.GetType()
, en términos de rendimiento? Porque me parece que this.GetType()
es mucho más seguro que los posibles errores de copiar y pegar al copiar en otra clase.C# performance question: typeof (MyClass) vs. this.GetType()
Respuesta
typeof (Foo) es una búsqueda de tipo estático; esencialmente ocurre en tiempo de compilación, por lo que solo obtiene el tipo de nombre explícito.
GetType() es una búsqueda dinámica de tipos; es un método virtual que se llama en el tiempo de ejecución y le dará el tipo exacto, incluso si está utilizando el polimorfismo. Entonces, es "más lento" teóricamente, pero te está dando algo que no puedes obtener de typeof (T). Si necesita uno u otro para su diseño, la velocidad no será un factor.
mike - cortó los "comentarios" y proporcionó una definición concisa aquí. +1 –
Problemas de rendimiento aparte, en el ejemplo proporcionado, GetType
ni siquiera es una opción porque es un instancia método; no se puede invocar desde un inicializador de campo. En cualquier caso, dado que la intención es inicializar un campo estático desde un 'contexto' estático, lógicamente una referencia this
no puede estar disponible, por lo que bajar la ruta del constructor estático tampoco ayudaría con GetType
.
// Can't use GetType() - the this reference is not available.
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
Tienes razón, qué estúpido de mi parte no haber notado la palabra clave 'static' :) –
@Ani, pero ¿y el rendimiento, cuando se conocen tanto el objeto como el nombre del tipo? – Shimmy
- 1. & new MyClass() vs new MyClass() en PHP
- 2. CALayer performance vs. UIImageView performance
- 3. es vs typeof
- 4. Genéricos: T extiende MyClass vs. T extiende MyClass <T>
- 5. Static Vs Instance Method Performance C#
- 6. Javascript - Argumentos Vs Funciones anidadas Vs Performance
- 7. System.Reflection vs Generics - performance
- 8. strftime performance vs. snprintf
- 9. performance stringbuf vs cadena
- 10. VS 2010 Performance Explorer
- 11. UPDATE vs INSERT performance
- 12. equivalente de MyClass en C#
- 13. ReverseString, una C-interview-question
- 14. typeof operator en C
- 15. ?: Operador vs. Si Statement Performance
- 16. SQL JOIN vs IN performance?
- 17. Hibernate Query vs Criteria Performance
- 18. Boost.Variant Vs Virtual Interface Performance
- 19. HTTPListener vs Native HTTP performance
- 20. variable === undefined vs. typeof variable === "undefined"
- 21. F # vs. C# performance Firmas con código de ejemplo
- 22. ¿Por qué C# no permite un typeof como parámetro predeterminado?
- 23. Scala: Mutable vs. Inmutable Object Performance - OutOfMemoryError
- 24. 'typeid' versus 'typeof' en C++
- 25. MethodBase.GetCurrentMethod() Performance?
- 26. Qt Application Performance vs. WinAPI/MFC/WTL/
- 27. C/Python Socket Performance?
- 28. C++ Serialization Performance
- 29. WPF C# Application Performance
- 30. C# Decimal datatype performance
Cuando no tiene ninguna instancia, solo TYPEOF está disponible, ¿no es así? –