Czy istnieje limit liczby klas, które przestrzeń nazw może mieć w .net? Dalej jaka jest zalecana liczba klas, które powinny znajdować się w przestrzeni nazw?Czy istnieje limit liczby klas, które przestrzeń nazw może mieć w .net?
Odpowiedz
Próbowałem go: Właśnie zbudowałem zespół zawierający 1.000.000 typów bez problemu. Jednak przy 5 000 000 kompilator C# zabrakło pamięci :-).
+1 za zabrakło pamięci w kompilatorze C#. : o) –
@Stevan ... więc można powiedzieć, że nie ma ograniczeń co do liczby klas, które mogą mieć przestrzenie nazw ... ale są ograniczenia pamięci, które mogą to zrobić. – HotTester
@HotTester: Wierzę, że może. Załóżmy, że kompilator C# nie zawiesił się i wyprodukował jedną gigantyczną bibliotekę dll. CLR musi nadal móc ładować typy do pamięci. CLR robi to leniwie, ale wszystkie używane klasy pozostaną JITted w pamięci, aż proces zginie.Jednak bardzo trudno jest to zliczyć w wielu klasach, ponieważ zwykle klasy będą znacznie większe od pustych typów klasy C {}, które skompilowałem w moim eksperymencie. przy okazji prawdopodobnie moglibyśmy ustalić maksymalną liczbę typów w zespole, ale ponieważ pojedyncza przestrzeń nazw nie jest ograniczona do pojedynczego zespołu, ta kwota byłaby praktycznie nieograniczona. – Steven
O ile mi wiadomo, nie ma takiego limitu, tak samo jak nie ma limitu liczby klas, jakie możesz mieć.
Przestrzeń nazw jest po prostu częścią pełnej nazwy klasy.
Nie ma określonej maksymalnej liczby klas „per nazw” - przestrzeń nazw jest naprawdę tylko częścią pełnej nazwy typu, a nie logiczną całość w CLR
Zalecana liczba jest cokolwiek ma sens: Redakcyjne przestrzenie nazw, aby grupować razem logicznie powiązane klasy.
Jestem pewien, że jeśli masz wystarczająco dużo typów, możesz uruchomić kompilator lub środowisko wykonawcze z pamięci, ale to jest fizyczny limit, a nie specyfikacja - i prawdopodobnie nie ma znaczenia, czy są one w tym samym obszarze nazw lub nie.
Zauważ, że jak wskazuje Steven, możesz mieć również tę samą przestrzeń nazw w wielu złożeniach.
Darn. Pokonaj mnie. +1. – David
Ty też mnie pokonałeś! :-) – DaveDev
Nie zapominaj, że chociaż może być maksymalna liczba typów na zestaw, pojedyncza przestrzeń nazw może być rozłożona na nieograniczoną liczbę złożeń, przez co liczba typów w tej przestrzeni nazw jest praktycznie nieograniczona. – Steven
Bez limitu. Liczba typów zależy od domeny problemu. Jeśli określony "folder" jest tylu typów, masz dowolność. W mojej aplikacji mam przestrzeń nazw dla wiadomości w określonym protokole i mam około 200 różnych typów wiadomości.
Może istnieć lub nie być fizyczny limit, ale przed dotarciem do niego należy osiągnąć logiczny limit.
Co do "ile powinno być", odpowiedź, jak większość w .Net, jest "to zależy". Nie ma jednoznacznej odpowiedzi na to pytanie - w zasadzie chcesz logicznie podzielić swoje rozwiązanie na projekty związane z funkcjonalnością lub celem - niezależnie od tego, co ma sens w twoim przypadku i dla twoich upodobań.
Zawsze można utworzyć nowy zestaw z większą liczbą klas w dowolnej przestrzeni nazw. Żaden kompilator nie może praktycznie wymusić globalnego limitu.
Cóż, nazwa klasy musi pasować do napisu. Jest tylko kilka poprawnych znaków, więc podając to jako bardzo szorstkie przypuszczenie jako 850000, ponieważ nie mogę sobie pozwolić na uzyskanie liczby znaków w różnych klasach w LUW, byłoby to w przestrzeni nazw o długości jednego znaku - daj limit 850000x10737418213! x10737418213 !. Jednak VB.NET może działać tylko z nazwami o rozmiarze 1023 znaków, więc ograniczyłby je do 850000x1021! X1021! i C# może obsługiwać tylko 511 znaków o długości, więc 85000x509! x509!
nie mają .NET4.0 ramy, więc big-numeryczny matematyki potrzebne do pracy z tych równań jest zbyt compliated zajmować się teraz;)
85.000 to chyba dobrze off, ale ideograficzne znaki są na ogół w klasie Lo, co jest dozwolone w nazwach klas i wypełniają bardzo duży fragment przypisanych punktów kodowych. W każdym razie, niezależnie od tego, jaka będzie prawdziwa wartość, wzrośnie z późniejszymi wersjami Unicode.
Wszelkie ograniczenia techniczne, a nawet fizyczne zostaną trafione przed tym punktem, ale droga, zanim to osiągniemy celowy limit. Przestrzeń nazw nie istnieje dla kompilatora, istnieje dla ludzi. Kompilator mógłby poradzić sobie równie dobrze (a może lepiej), gdyby nie było przestrzeni nazw i koderów, gwarantujących, że nigdy nie użyją ponownie nazw. Przestrzenie nazw istnieją dla ludzi, którzy mają do czynienia z typowymi rozmiarami (z rozmysłem wielkości).
Powolny dzień, panie Hanna? :) –
To wieczorny czas chillout w mojej strefie czasowej. Poza tym, gdyby to był naprawdę powolny dzień, zdobyłbym dokładną liczbę poprawnych nazwisk i nazw części i zrobiłem to znacznie dokładniej. –
Dla zainteresowanych, Wolfram Alpha informuje, że 850000x509! X509! jest tylko 2323 cyfr dziesiętnych :) – Constantin
Jestem pewien, że to zostanie pochowane, ale istnieje BARDZO skończona liczba klas, które możesz mieć w bibliotece dll. This source mówi, że
Jeśli klasa jest identyfikowany w tabeli metadanych za pomocą tokena metadanych oraz token metadanych jest szereg czterech bajtów, oznacza to, że liczba klas, które zespół może zawierać jest mniejsza niż największa numer na 3 bajty (pierwszy bajt jest połączeniem z typem tabeli metadanych). Największa liczba na 3 bajtach wynosi 2^24- 1 lub 16777215.
Zatem maksymalna liczba klas (i klas), że członkowie zespołu mogą zawierać .NET jest 16777215.
Nie rozumiem wszystkich odpowiedzi "bez ograniczeń" za pomocą upvotes. Jak ludzie sądzą, że klasy są przywoływane po tym, jak są JITed? To jest poprawna odpowiedź. –
@MikeMarynowski: Pierwotne pytanie dotyczyło liczby klas w * przestrzeni nazw *. Ta odpowiedź stanowi oświadczenie o liczbie typów w zespole *. Choć technicznie poprawne, odpowiada na inne pytanie. Odpowiedzi "brak teoretycznego limitu" są bardziej trafne i równie poprawne. – stakx
@stakx Pytanie nie pytało o teoretyczny limit, ale dla rekordu 16777215 IS jest teoretycznym limitem opartym na specyfikacji CLI. Praktycznym ograniczeniem jest jednak dużo pamięci do tej pory. Ta odpowiedź jest w praktyce jedyną, która ma znaczenie. Od pytania nie jest jasne, czy chciał wiedzieć tylko dla zabawy, czy dlatego, że musiał podjąć decyzję projektową w oparciu o ile klas mógł mieć, w takim przypadku jest to odpowiedź, której szuka. –
- 1. Czy istnieje ograniczenie liczby modułów, które może zobaczyć WinDbg?
- 2. Czy istnieje limit liczby otwartych kanałów na sesję w JSch?
- 3. Przestrzenie nazw systemu Linux: czy istnieje przestrzeń nazw sieci bez powiązania z procesem?
- 4. Czy istnieje limit System.IO.FileShare?
- 5. Czy istnieje limit rozmiaru tablicy w ruby?
- 6. Przestrzeń nazw PHP - rozwiązanie obejmujące wszystkie klasy w przestrzeni nazw
- 7. socket.io-limit liczby maksymalnych połączeń w przestrzeni nazw
- 8. Ile metod może mieć klasa C#?
- 9. Czy istnieje maksymalny limit kubełków, jaki może mieć projekt Google Cloud Storage?
- 10. Zagnieżdżona anonimowa przestrzeń nazw?
- 11. C# odniesione nazw ukryte Klasa Przestrzeń nazw
- 12. „szablonów” przestrzeń nazw
- 13. Typ lub przestrzeń nazw "Buforowanie" nie istnieje w przestrzeni nazw "System.Runtime"
- 14. Typ lub przestrzeń nazw "SQLite" nie istnieje w przestrzeni nazw "System.Data" (czy brakuje odniesienia do zespołu?)
- 15. Jak utworzyć przestrzeń nazw w skrypcie PowerShell?
- 16. Limit liczby oddziałów git
- 17. Czy istnieje limit elementów, które można zapisać na liście?
- 18. Liczba klas w .NET?
- 19. "System": przestrzeń nazw o tej nazwie nie istnieje
- 20. Czy istnieje ograniczenie liczby tabel, które może posiadać baza danych PostgreSQL?
- 21. Czy istnieje sposób wyświetlania nazw kontenerów w statystykach dokowania?
- 22. Typ lub przestrzeń nazw "TeamFoundation" nie istnieje w przestrzeni nazw "Microsoft"
- 23. Przestrzeń nazw rakiety/bazy
- 24. Przestrzeń nazw C++ i zmienne statyczne
- 25. Limit liczby argumentów głównych w C
- 26. Typ lub przestrzeń nazw "ServiceBus" nie istnieje w przestrzeni nazw "Microsoft"
- 27. Konwencja nazw plików klas ogólnych
- 28. Przestrzeń nazw JavaScript z jQuery
- 29. Czy istnieje ograniczenie liczby kontekstów renderowania OpenGL, które można jednocześnie utworzyć?
- 30. Jak określić przestrzeń nazw funkcji?
Dlaczego pytasz ? ... Moje pieniądze są bez limitu i nie ma zalecanej liczby. To zależy od twojego projektu. – Fosco
Zostałem poproszony o to pytanie w wywiadzie technicznym. – HotTester
Zobacz także [Idealna liczba klas na gałąź przestrzeni nazw] (http://stackoverflow.com/questions/146316/ideal-number-of-classes-per-namespace-branch) – Constantin