Des objets reste limitée à 2 GO en taille dans le CLR 4.0?
Je comprends qu'il y a une limite de 2 GO sur un seul cas dans .NET. Je n'ai pas payé beaucoup d'attention que j'ai principalement travaillé sur les OS 32 bits jusqu'à présent. Sur 32 mais il est plus ou moins une limitation artificielle de toute façon. Cependant, j'ai été assez surpris d'apprendre que cette limitation s'applique également sur 64 bits .NET.
Depuis des collections List<T>
utiliser un tableau pour stocker les éléments, ce qui signifie qu'une .NET application en cours d'exécution sur 32 bits sera en mesure de tenir deux fois plus beaucoup de type de référence des éléments d'une liste par rapport à la même application en cours d'exécution sur 64 bits. C'est assez surprenant de l'omi.
Personne ne sait si cette limitation est traitée dans le CLR 4.0 (je n'ai pas de 4.0 installation à la main en ce moment).
- Mise à jour 2012: Que de .NET 4.5, sur les systèmes x64, les développeurs peuvent désormais allouer des objets de plus (beaucoup plus) de 2 GO. La limite de 2 go est mort. centerspace.net/blog/nmath/large-matrices-and-vectors/...
- Lien Correct semble être centerspace.net/blog/nmath/large-matrices-and-vectors
- Même les corrigés des liens est mort 🙁
- Essayez ce lien pour plus d'infos sur le contournement la limite de 2 go (MSDN) à l' msdn.microsoft.com/en-us/library/hh285054(v=vs. 110).aspx
Vous devez vous connecter pour publier un commentaire.
C'est pire que ce que vous êtes à l'espace de processus, lorsque vous travaillez .NET de 32 bits est beaucoup plus petite que la limite théorique. En 32 bits .NET applications, mon expérience est que vous aurez toujours tendance à commencer à sortir de la mémoire des erreurs quelque part autour de 1.2-1.4 go de l'utilisation de la mémoire (certaines personnes disent qu'ils peuvent obtenir à 1,6... mais je n'ai jamais vu ça). Bien sûr, ce n'est pas un problème sur les systèmes 64 bits.
Cela étant dit, un seul tableau 2 go de types de référence, même sur des systèmes 64 bits, est une énorme quantité d'objets. Même avec 8 octets références, vous avez la possibilité d'allouer un tableau de 268,435,456 les références de l'objet - qui peuvent être très grandes (jusqu'à 2 go, plus si ils utilisent des objets imbriqués). C'est plus de mémoire que jamais vraiment être requis par la plupart des applications.
L'un des membres de la CLR équipe blogué sur ce, avec quelques options pour des moyens de contourner ces limitations. Sur un système 64 bits, de faire quelque chose comme sa BigArray<T> serait une solution viable pour allouer un nombre quelconque d'objets dans un tableau beaucoup plus que les 2 go de l'objet unique limite. P/Invoke peut vous permettre d'allouer les grandes baies ainsi.
Edit: je devrais avoir parlé, ainsi - je ne crois pas que ce comportement a changé du tout .NET 4. Le comportement n'a pas changé depuis le début de l' .NET.
Edit: .NET 4.5 ont maintenant la possibilité de x64 pour autoriser explicitement les objets à être de plus de 2 go par la mise en gcAllowVeryLargeObjects dans l'application.config.
long LongLength
de la propriété), mais jusqu'à présent, seuls les Mono effectivement utilisé.gb
en ce qui concerne la taille est synonyme de GO, c'est à dire Giga Octets. De mémoire le schéma d'adressage est toujours en termes d'octets, mais je n'ai pas compris votre post en ce qui concerne la taille. Pouvez-vous préciser ou de les rendre compatibles dans le cas où il y a une miss?.NET Framework 4.5 permet de créer des tableaux de plus de 2 go sur les plates-formes 64 bits. Cette fonctionnalité n'est pas activée par défaut, il doit être activé via le fichier de configuration à l'aide de la gcAllowVeryLargeObjects élément.
http://msdn.microsoft.com/en-us/library/hh285054(v=vs. 110).aspx
int[]
avecuint.MaxValue
éléments?byte[]
...C'est un gros problème dans le champ numérique. Toute personne utilisant le numérique, les bibliothèques de classes dans .NET a leurs matrices stockées sous la forme de tableaux en dessous. C'est donc bibliothèques natives peuvent être appelés à faire de l'arithmétique. La limite de 2 go entrave gravement la taille des matrices possible en 64 bits .NET. Plus ici.