¿Existe algún límite en la cantidad de clases que un espacio de nombres puede tener en .net? Además, ¿cuál es el número recomendado de clases que debería haber en un espacio de nombres?¿Existe algún límite en la cantidad de clases que un espacio de nombres puede tener en .net?
Respuesta
Lo probé: acabo de construir un conjunto que contiene 1.000.000 de tipos sin ningún problema. Sin embargo, en 5.000.000 el compilador de C# se quedó sin memoria :-).
+1 para hacer que el compilador de C# se quede sin memoria. : o) –
@Stevan ... por lo que se puede decir que no hay límite para la cantidad de clases que puede tener un espacio de nombres ... pero hay restricciones de memoria que pueden afectarlo. – HotTester
@HotTester: Creo que sí. Supongamos que el compilador de C# no falla y produce un dll gigantesco. El CLR aún debe poder cargar tipos en la memoria. El CLR hace esto vago, pero todas las clases usadas permanecerán JITted en la memoria hasta que el proceso falle.Sin embargo, es muy difícil contar esto en número de clases, porque normalmente las clases serán mucho más grandes que los tipos vacíos de 'clase C {}' que compilé en mi experimento. Por cierto, tal vez podríamos determinar la cantidad máxima de tipos en un ensamblado, pero como un solo espacio de nombres no está limitado a un solo ensamblaje, esta cantidad sería prácticamente ilimitada – Steven
Por lo que yo sé, no hay tal límite, de la misma manera que no hay límite en la cantidad de clases que puede tener.
El espacio de nombres es simplemente parte del nombre completo de la clase.
No hay un número máximo especificado de clases "por espacio de nombres" - un espacio de nombres es realmente sólo una parte del nombre completo del tipo, no es una entidad lógica en el CLR
El número recomendado es lo que tenga sentido: el uso espacios de nombres para agrupar clases relacionadas lógicamente.
Estoy seguro de que si tiene suficientes tipos puede ejecutar el compilador o el tiempo de ejecución sin memoria, pero eso es un límite físico, no una especificación, y probablemente no importe si están en el mismo espacio de nombres o no.
Tenga en cuenta que, como señala Steven, también puede tener el mismo espacio de nombres presente en varios conjuntos también.
Darn. Pásame a eso. +1. – David
¡me has vencido también! :-) – DaveDev
No olvide que, si bien podría haber un número máximo de tipos por ensamblado, un único espacio de nombre podría distribuirse en un número ilimitado de ensamblajes, haciendo que el número de tipos en ese espacio de nombres sea prácticamente ilimitado. – Steven
Sin límite. El número de tipos de feasabe depende del dominio del problema. Si una cierta "carpeta" como muchos tipos tiene alguna libertad. En mi aplicación, tengo un espacio de nombres para mensajes en un protocolo determinado y tengo alrededor de 200 tipos de mensajes diferentes.
Puede haber o no un límite físico, pero debe alcanzar un límite lógico antes de llegar allí.
En cuanto a "cuántos debe haber", la respuesta, como la mayoría en .Net, es "depende". No hay una respuesta clara a eso; básicamente, desea dividir lógicamente su solución en proyectos relacionados por funcionalidad o propósito, lo que tenga sentido en su caso particular y para sus gustos particulares.
Siempre puede crear un ensamblaje nuevo con más clases en cualquier espacio de nombres dado. Ningún compilador puede aplicar prácticamente un límite global.
Bueno, un nombre de clase tiene que caber en una cadena. Solo hay algunos caracteres válidos, por lo que se trata de una conjetura muy aproximada, como 850000, porque no me molestaría obtener un recuento de los caracteres en diferentes clases en el UCS, esto sería - en un espacio de nombres de un nombre de longitud de carácter - dar un límite de 850000x10737418213! x10737418213 !. Sin embargo, VB.NET solo puede funcionar con nombres de 1023 caracteres, por lo que se limitaría a 850000x1021! X1021! y C# solo puede manejar nombres de 511 caracteres, ¡así que 85000x509! x509!
yo no tengo un marco .NET4.0, por lo que la matemática-numérica grande tenía que trabajar a cabo esas ecuaciones es demasiado compliated que molestarse con este momento;)
El 85000 es probable que así fuera, pero ideográfico los personajes generalmente están en la clase Lo, que está permitido en los nombres de las clases, y completan una gran porción de los puntos de código asignados. En cualquier caso, este sea cual sea el valor real aumentará con las versiones posteriores de Unicode.
Todo tipo de límites técnicos e incluso físicos serán alcanzados antes de este punto de todos modos, pero mucho, mucho antes de eso, alcanzamos el límite determinado. El espacio de nombres no existe para el compilador, existe para los humanos. El compilador podría funcionar igual de bien (de hecho, quizás mejor) si no hubiera espacios de nombres y los programadores simplemente garantizaran nunca reutilizar los nombres. Existen espacios de nombres para que los seres humanos tengan grupos de tipos de tamaño razonable (de tamaño de aprendizaje) con los que lidiar.
Día lento, Sr. Hanna? :) –
Es la hora de descanso de la tarde en mi zona horaria. Además, si fuera un día realmente lento, habría obtenido un recuento exacto de caracteres válidos de inicio de nombre y parte de nombre y lo hubiera hecho de forma mucho más precisa. –
Para aquellos interesados, Wolfram Alpha informa que 850000x509! X509! tiene solo 2323 dígitos decimales :) – Constantin
Estoy seguro de que esto será enterrado, pero hay un número MUY finito de clases que puede tener en un dll. This source dice que
Si una clase se identifica en la tabla de metadatos mediante un token de metadatos y el token de metadatos es un número de cuatro bytes, esto significa que el número de clases que una asamblea puede contener es más pequeño que el mayor número en 3 bytes (el primer byte es una conexión al tipo de tabla de metadatos). El mayor número de 3 bytes es 2^24 1 ó 16777215.
Por lo tanto, el número máximo de clases (y miembros de clases) que un ensamblado de .NET puede contener es 16777215.
No entiendo todas las respuestas "sin límite" con votos ascendentes. ¿Cómo piensan las personas que las clases están referenciadas después de ser JITed? Esta es la respuesta correcta. –
@MikeMarynowski: la pregunta original sobre el número de clases en un * espacio de nombres *. Esta respuesta hace una declaración sobre la cantidad de tipos en * ensamblaje *. Aunque técnicamente correcto, esto responde una pregunta diferente. Las respuestas "sin límite teórico" son más precisas e igualmente correctas. – stakx
@stakx La pregunta no preguntó acerca de un límite teórico, pero para el registro 16777215 ES el límite teórico basado en la especificación CLI. Sin embargo, el límite práctico es la cantidad de memoria que tiene hasta ese momento. Esta respuesta en la práctica es la única que importa. A partir de la pregunta, no está claro si quería saber solo por diversión o porque tenía que tomar una decisión de diseño basada en cuántas clases podría tener, en cuyo caso esta es la respuesta que está buscando. –
- 1. CSS: ¿Existe un límite en la cantidad de clases que puede tener un elemento HTML?
- 2. ¿Existe un límite en la cantidad de tablas que puede tener en una base de datos?
- 3. ¿Existe un límite en la cantidad de contextos de representación de OpenGL que puede crear simultáneamente?
- 4. ¿existe un límite en la cantidad de hilos que ruby puede ejecutar a la vez?
- 5. ¿Límite en la cantidad de parámetros genéricos en .NET?
- 6. ¿Existe un límite práctico para la cantidad de elementos de lienzo que puede tener en una página?
- 7. ¿Existe un límite superior para la cantidad de confirmaciones que un repositorio de git puede manejar?
- 8. ¿Existe un límite en la cantidad de aplicaciones diferentes que un desarrollador único puede publicar en Android Market?
- 9. ¿Existe un límite práctico en la cantidad de archivos mapeados en memoria en iOS?
- 10. ¿Documentación del espacio de nombres en un proyecto .Net (Sandcastle)?
- 11. ¿Existe un límite para la cantidad de archivos en un directorio en una tarjeta SD?
- 12. sdwebimage: ¿hay un límite en la cantidad de setimageWithUrl que se puede poner en cola?
- 13. Clases dentro de CoffeeScript 'Espacio de nombres'
- 14. ¿Existe un límite práctico para la cantidad de elementos en un conjunto ordenado en redis?
- 15. ¿Hay un límite en la cantidad de módulos que WinDbg puede ver?
- 16. Existe un límite de memoria para un solo proceso .NET
- 17. ¿Existe un límite en cuanto a la capacidad de JSON?
- 18. Reemplazando clases en el espacio de nombres del sistema
- 19. C#, 'Forms' no existe en el espacio de nombres system.windows
- 20. ¿Hay algún límite en la cantidad de tablas de almacenamiento de Azure permitidas en una cuenta?
- 21. La etiqueta no existe en el espacio de nombres XML
- 22. Manejando modelos de espacio de nombres (clases) en el espacio de nombres
- 23. El tipo o espacio de nombres 'LINQ' no existe en el espacio de nombres 'System.Data', etc
- 24. ¿Hay algún límite en el número de propiedades en una clase .NET?
- 25. JSON no existe en el espacio de nombres System
- 26. espacio de nombres 'SharePoint' no existe en el espacio de nombres 'Microsoft'
- 27. 'Rectángulo' no existe en el espacio de nombres 'System.Drawing'
- 28. Restablecer un espacio de nombres en PHP?
- 29. El tipo o el nombre del espacio de nombres 'Objetos' no existe en el espacio de nombres 'System.Data'
- 30. ¿Está bien tener un nombre de espacio de nombres que exista en dos puntos del árbol?
¿Por qué preguntas ? ... Mi dinero está allí sin límite, y no hay un número recomendado. Depende de tu proyecto – Fosco
Me hicieron esta pregunta en una entrevista técnica. – HotTester
Véase también [Número ideal de clases por rama de espacio de nombres] (http://stackoverflow.com/questions/146316/ideal-number-of-classes-per-namespace-branch) – Constantin