Longueur maximale de byte[]?
Je suis en train de créer un tableau de byte
s dont la longueur est UInt32.MaxValue
. Ce tableau est essentiellement une petite(ish) base de données en mémoire:
byte[] countryCodes = new byte[UInt32.MaxValue];
Sur ma machine, cependant, au moment de l'exécution, je reçois un System.OverflowException
avec "opération Arithmétique a entraîné un dépassement de capacité".
Quel est le problème? Dois-je utiliser un unsafe
bloc et malloc
? Comment pourrais-je le faire en C#?
- Je n'avais aucune idée qu'il y avait tellement de nombreux pays!
Vous devez vous connecter pour publier un commentaire.
La mise en œuvre actuelle de
System.Array
utiliseInt32
pour tous les internes de compteurs, etc, de sorte que le nombre maximal théorique d'éléments estInt32.MaxValue
.Il y a également 2 go max-taille-par-objet de la limite imposée par Microsoft CLR.
Une bonne discussion et une solution de contournement ici...
Et quelques, pas tout à fait en double, les questions et les réponses ici...
Sur .NET 4.5 Le maximum instantiatable longueur d'un tableau d'octets est: 2147483591, soit 56 de moins de int.MaxValue. Trouvé par:
Longueur maximale d'un tableau d'octets est: 2130702268.
par exemple:
Je ne voudrais pas faire cela en premier lieu. Pourquoi voudriez-vous mis tout cela de mémoire allouée à cette base de données en mémoire? Ne serait-ce pas à vous souhaitiez une structure de données dont la taille s'incrémente au fur et à mesure (par exemple,
List<int>
)? Ou (si vous préférez) utilisation d'une base de données en mémoire comme sqlite?