Todo el mundo ha explicado cómo la optimización prematura es una mala idea (lo que es): sin embargo, explicaré por qué realmente no hace ninguna diferencia (excepto en los casos en los que utiliza la reflexión - más sobre esto más adelante).
referencia estática En Código
El CLR (y por lo tanto MSIL - que es lo que C# compila a) en realidad no tiene ninguna noción o concepto de espacios de nombres. Un tipo (clase, enumeración, etc.) se denomina por su nombre completo (por ejemplo, System.Runtime.Serialization.ISerializable
) y las 'paradas completas' son tan opacas (significativas) como cualquier otro carácter en el nombre. El concepto completo de espacios de nombres es algo que C# (o el idioma que esté usando) le brinda a usted. Sin embargo, en términos de MSIL sin procesar, el nombre del tipo tampoco importa.
En MSIL nunca se refiere a algo por su nombre. Todo en un ensamblado (dll o exe) tiene un cierto tipo de mango. Por ejemplo, un tipo tiene un TypeHandle
y cualquier elemento contenido por un tipo tiene un MemberHandle
: ambos son un entero de 32 bits. Por lo tanto, cuando llama a un método, no escribe call <MethodName> on <TypeName> in <Assembly>
en MSIL; en su lugar, escribe call <MethodHandle> on <TypeHandle> in <Assembly>
. Por lo tanto, obtener un tipo que tenga 5000 caracteres en su nombre requiere la misma cantidad de tiempo que uno con 5. Los nombres reales se almacenan en un lugar separado en el ensamblaje: solo para que pueda usar el reflejo para obtenerlos, o para compiladores (en otras palabras, los nombres solo se almacenan "para su información"); esto se denomina metadatos.
Creo que hay una manera de hacer que ILDASM te proporcione el MSIL sin procesar, pero no estoy seguro.
acceder mediante Reflexión
Debido a que usted está haciendo una comparación de cadenas entre el nombre del tipo que desee y los nombres disponibles en el montaje se hace una diferencia: las comparaciones de cadenas son una operación O (n). Sin embargo, esta vez es minúsculo en comparación con el costo total de la reflexión y es completamente insignificante (hará nanosegundos de una diferencia) - ni siquiera se preocupe por ello.
Resumen
Esta es la razón por la optimización prematura es realmente malo - usted asumió que era un cuello de botella donde en realidad no hay ninguna rápida o más lenta es la forma de hacerlo.
No quiero competir con @PlayDeezGames respuesta: realmente no lo hará. En lenguajes dinámicos, puede. En SQL Server puede golpearlo por un costo de hasta 30%. Nunca en C#. –