1. limites de la mémoire
Eh bien, la taille de System.Object sans propriétés est 8 octets (2x32 pointeurs de bits), ou 16 octets dans un système 64 bits. [EDIT:] En fait, je viens de vérifier dans WinDbg, et la taille est de 12 octets sur x86 (32 bits). Ainsi, dans un système 32 bits, vous auriez besoin d'un RAM de 24 Go (que vous ne pouvez pas avoir sur un système 32 bits).
2. La conception du programme
Je crois fermement qu'une telle grande liste ne devrait pas être tenue en mémoire, mais plutôt dans un autre support de stockage. Mais dans ce cas, vous aurez toujours la possibilité de créer une classe en cache envelopper une liste, qui gérerait le stockage réel sous le capot. Donc tester la taille avant d'ajouter est le mauvais endroit pour faire le test, votre implémentation de List devrait le faire elle-même si vous le jugez nécessaire un jour.
3. Pour être du bon côté
Pourquoi ne pas ajouter un compteur rentrée à l'intérieur de chaque méthode pour éviter un débordement de la pile? :)
Alors, oui, c'est fou de tester pour ça. :)
Vous observez OutOfMemoryException. Les MOO peuvent généralement être manipulés et l'opération réessayée dans une minute ou à. Par exemple. deux threads séparés demandent beaucoup de mémoire, seulement 1 l'obtient. Essayez la seconde plus tard. Peut parfois se produire si votre application effectue une manipulation PDF ou image en mémoire. – Precipitous