Gibt es ein Limit für die Anzahl der Klassen, die ein Namespace in .net haben kann? Was ist die empfohlene Anzahl von Klassen, die in einem Namespace vorhanden sein sollten?Gibt es eine Begrenzung für die Anzahl der Klassen, die ein Namespace in .net haben kann?
Antwort
Ich habe es ausprobiert: Ich habe gerade eine Baugruppe mit 1.000.000 Typen ohne Probleme gebaut. Bei 5.000.000 hat der C# -Compiler jedoch nicht genug Speicher :-).
+1, damit der C# -Compiler nicht mehr genügend Arbeitsspeicher hat. : o) –
@Stevan ... also kann man sagen, dass es keine Begrenzung für die Anzahl der Klassen gibt, die ein Namespace haben kann ... aber es gibt Speicherbeschränkungen, die dies bewirken können. – HotTester
@HotTester: Ich glaube es kann. Angenommen, der C# -Compiler stürzte nicht ab und produzierte eine gigantische DLL. Die CLR muss immer noch in der Lage sein, Typen im Speicher zu laden. Die CLR macht dies träge, aber alle verwendeten Klassen bleiben JIT im Speicher, bis der Prozess abbricht.Es ist jedoch sehr schwierig, dies in der Anzahl der Klassen zu zählen, da normalerweise Klassen viel größer sind als die leeren 'Klasse C {}' -Typen, die ich in meinem Experiment kompiliert habe. Übrigens könnten wir vielleicht die maximale Anzahl von Typen in einer Assembly bestimmen, aber da ein einzelner Namespace nicht auf eine einzelne Assembly beschränkt ist, wäre diese Menge praktisch unbegrenzt. – Steven
Soweit ich weiß, gibt es keine solche Beschränkung, so wie es keine Begrenzung für die Anzahl der Klassen gibt, die Sie haben können.
Der Namespace ist einfach Teil des vollständigen Namens der Klasse.
Es gibt keine festgelegte maximale Anzahl der Klassen „pro Namensraum“ - ein Namespace ist wirklich nur ein Teil des vollständigen Namen des Typs, nicht eine logische Einheit in den CLR
Die empfohlene Anzahl, was Sinn macht, ist: Verwendung Namespaces, um logisch zusammengehörige Klassen zu gruppieren.
Ich bin sicher, dass wenn Sie genug Typen haben, können Sie den Compiler oder die Laufzeit nicht genügend Arbeitsspeicher ausführen, aber das ist eine physikalische Grenze nicht eine Spezifikation - und es ist wahrscheinlich egal, ob sie im gleichen Namespace oder sind nicht.
Beachten Sie, dass Steven darauf hinweist, dass in mehreren Assemblies auch der gleiche Namespace vorhanden sein kann.
Darn. Beat mich dazu. +1. – David
du schlägst mich auch! :-) – DaveDev
Vergessen Sie nicht, dass, während es eine maximale Anzahl von Typen pro Assembly geben könnte, ein einzelner Namespace über eine unbegrenzte Anzahl von Assemblys verteilt sein könnte, was die Anzahl der Typen in diesem Namespace praktisch unbegrenzt macht. – Steven
Keine Begrenzung. Die mögliche Anzahl der Typen hängt von der Problemdomäne ab. Wenn ein bestimmter "Ordner" so viele Typen hat, hast du Freiheit. In meiner Anwendung habe ich einen Namensraum für Nachrichten in einem bestimmten Protokoll und ich habe etwa 200 verschiedene Nachrichtentypen.
Es mag oder darf kein physisches Limit sein, aber Sie sollten eine logische Grenze erreichen, bevor Sie dorthin kommen.
Wie für "wie viele es sein sollte", ist die Antwort, wie die meisten in .Net, "es kommt darauf an." Es gibt keine klare Antwort darauf - im Grunde möchten Sie Ihre Lösung logisch in Projekte aufteilen, die sich nach Funktionalität oder Zweck richten - was auch immer in Ihrem speziellen Fall und für Ihren speziellen Geschmack sinnvoll ist.
Sie können immer eine neue Assembly mit mehreren Klassen in einem beliebigen Namespace erstellen. Kein Compiler kann praktisch ein globales Limit durchsetzen.
Nun, ein Klassenname muss in eine Zeichenfolge passen. Es gibt nur ein paar gültige Zeichen, also grob geschätzt als 850000, weil ich nicht daran interessiert bin, die Anzahl der Charaktere in verschiedenen Klassen im UCS zu zählen, würde dies - in einem Namensraum mit einem Zeichenlangennamen - Gib ein Limit von 850000x10737418213! x10737418213 !. VB.NET kann jedoch nur mit Namen von 1023 Zeichen arbeiten, so dass es auf 850000x1021! X1021 beschränkt ist! und C# kann nur 511 Zeichen lange Namen behandeln, also 85000x509! x509!
Ich habe keinen .NET4.0 Rahmen, so dass die große numerische Mathematik diese Gleichungen benötigt, um funktionieren zu ist compliated mit jetzt zu stören;)
Die 85000 ist wahrscheinlich gut aus, aber ideographic Zeichen befinden sich im Allgemeinen in der Lo-Klasse, die in Klassennamen zulässig ist, und sie füllen einen sehr großen Teil der zugewiesenen Codepunkte aus. In jedem Fall wird dies unabhängig von dem tatsächlichen Wert mit späteren Unicode-Versionen erhöht.
Alle möglichen technischen und sogar physikalischen Grenzen werden vor diesem Punkt sowieso getroffen, aber so weit, viel früher haben wir die zweckmäßige Grenze erreicht. Der Namespace existiert nicht für den Compiler, er existiert für die Menschen. Der Compiler könnte genauso gut (in der Tat vielleicht besser) arbeiten, wenn es keine Namespaces und Codierer gäbe, die garantiert nie Namen wiederverwenden würden. Es gibt Namespaces für Menschen, die vernünftige (lernfähige) Gruppen von Typen haben, mit denen sie umgehen müssen.
Langsamer Tag, Herr Hanna? :) –
Es ist Abend Chillout-Zeit in meiner Zeitzone. Außerdem, wenn es ein wirklich langsamer Tag wäre, hätte ich eine genaue Anzahl von gültigen Namen-Start- und Namensteil-Zeichen erhalten und dies viel genauer gemacht. –
Für die Interessierten meldet Wolfram Alpha, dass 850000x509! X509! ist nur 2323 Dezimalstellen lang :) – Constantin
Ich bin sicher, dass dies begraben wird, aber es gibt eine sehr begrenzte Anzahl von Klassen, die Sie in einer DLL haben können. This source sagt, dass
Wenn eine Klasse in der Metadatentabelle unter Verwendung eines Metadaten-Token und die Metadaten-Token ein Vier-Byte-Nummer identifiziert wird, bedeutet dies, dass die Anzahl der Klassen, die eine Anordnung kleiner ist als der größte enthalten Nummer auf 3 Byte (das erste Byte ist eine Verbindung zum Metadatentabellentyp). Die größte Zahl von 3 Bytes 2^24- 1 oder 16777215.
Daher ist die maximale Anzahl von Klassen (und Klassen-Mitglieder), dass eine .NET-Assembly enthalten 16777215.
Ich verstehe nicht alle "no limit" Antworten mit upvotes. Wie denken Menschen, dass Klassen nach JITed referenziert werden? Dies ist die richtige Antwort. –
@MikeMarynowski: Die ursprüngliche Frage nach der Anzahl der Klassen in einem * Namensraum *. Diese Antwort gibt eine Aussage über die Anzahl der Typen in einer * Assembly *. Obwohl technisch korrekt, beantwortet dies eine andere Frage. Die "no theory limit" Antworten sind mehr auf den Punkt und gleichermaßen korrekt. – stakx
@stakx Die Frage hat nicht nach einer theoretischen Grenze gefragt, aber für die Aufzeichnung 16777215 ist die theoretische Grenze basierend auf der CLI-Spezifikation. Die praktische Grenze ist jedoch viel Speicher, den Sie bis zu diesem Punkt haben. Diese Antwort ist in der Praxis die einzige, die zählt. Aus der Frage ist unklar, ob er nur zum Spaß wissen wollte oder weil er eine Designentscheidung treffen musste, basierend auf der Anzahl der Klassen, die er haben könnte. In diesem Fall ist dies die Antwort, nach der er sucht. –
- 1. gibt es eine Begrenzung für die Anzahl der Threads, die Ruby auf einmal ausführen kann?
- 2. Gibt es ein Limit für die Anzahl der UIApplicationShortcutItems, die Sie haben können?
- 3. Gibt es eine Begrenzung der Anzahl der HTML-Elemente, die der Browser ohne Probleme anzeigen kann?
- 4. Python XLSXWRITE Gibt es eine Begrenzung für die Anzahl der Spalten, die erstellt werden können?
- 5. Gibt es eine Begrenzung für die Anzahl der Dateien in einem Verzeichnis auf einer SD-Karte?
- 6. Gibt es eine Begrenzung für die Anzahl der PubSub-Themen, die abonniert werden können?
- 7. Begrenzung der Anzahl generischer Parameter in .NET?
- 8. Anzahl der Klassen in .NET?
- 9. Gibt es eine Begrenzung für die Anzahl der Codezeilen, die Sie in eine Eclipse Java Doument setzen können?
- 10. über die Anzahl der Datei-Deskriptoren Begrenzung
- 11. Gibt es eine Beschränkung auf die Anzahl der Zeichen, die ein Variablen-/Eigenschaftsname sein kann?
- 12. Gibt es eine maximale Anzahl von Buckets, die ein Google Cloud Storage-Projekt haben kann?
- 13. Gibt es eine Begrenzung für die Anzahl der Marker, die auf Google Static Maps platziert werden können?
- 14. Redis: Gibt es eine Grenze für die Anzahl der Schlüssel, die ich speichern kann?
- 15. Gibt es in AutoIt eine Klassen- oder Namespace-Funktion?
- 16. Gibt es in mysql oder postgres eine Begrenzung für die Größe einer IN (1,2, n) -Anweisung?
- 17. Die Begrenzung der Mono-Laufzeit
- 18. Gibt es eine Protokollierungsfassade für die .NET-Welt?
- 19. Gibt es eine Grenze für die Anzahl der verschiedenen Marker, die Sie in einer Fusionsebene haben können?
- 20. Gibt es eine Begrenzung für die Länge des Schlüssels (Zeichenfolge) in JS-Objekt?
- 21. Begrenzung der CPU-Anzahl für einen Benutzer
- 22. Gibt es eine Begrenzung der Datengröße mit replaceWIth in jQuery?
- 23. Gibt es eine Begrenzung der Stapelgröße eines Prozesses in Linux
- 24. Die Begrenzung auf die Größe von .Net Array
- 25. Gibt es eine Möglichkeit, die Anzahl der Einreichungen für ein PHP-Formular zu begrenzen?
- 26. Gibt es eine Begrenzung, wie viel JSON halten kann?
- 27. log4j2 - Begrenzung der Anzahl der Protokolldateien
- 28. Gibt es einen besten .NET-Algorithmus für die Kreditkartenverschlüsselung?
- 29. Begrenzung der Anzahl der Objekte in NSArrayController
- 30. Wie kann ich die Anzahl der Schüler wissen, die die Voraussetzungen für einen Kurs belegt haben?
ist Warum sind Sie gefragt ? ... Mein Geld ist da, es gibt keine Begrenzung und keine empfohlene Nummer. Es hängt von Ihrem Projekt ab. – Fosco
Ich wurde diese Frage in einem technischen Interview gestellt. – HotTester
Siehe auch [Ideale Anzahl von Klassen pro Namespace-Zweig] (http://stackoverflow.com/questions/146316/ideal-number-of-classes-per-namespace-branch) – Constantin