26 Stimmen

Maximale Länge von byte[]?

Ich versuche, ein Array von byte s, deren Länge UInt32.MaxValue . Dieses Array ist im Wesentlichen eine kleine In-Memory-Datenbank:

byte[] countryCodes = new byte[UInt32.MaxValue];

Auf meinem Rechner erhalte ich jedoch zur Laufzeit eine System.OverflowException mit "Arithmetische Operation führte zu einem Überlauf".

Worum geht's? Brauche ich eine unsafe Block und malloc ? Wie würde ich das in C# machen?

38voto

LukeH Punkte 251752

Die derzeitige Umsetzung von System.Array verwendet Int32 für alle seine internen Zähler usw., so dass die theoretische Höchstzahl der Elemente bei Int32.MaxValue .

Außerdem ist die maximale Größe pro Objekt auf 2 GB begrenzt, die von der Microsoft CLR vorgegeben wird.

Eine gute Diskussion und Abhilfe hier...

Und hier ein paar verwandte, nicht ganz doppelte Fragen und Antworten...

14voto

Nick Punkte 754

Unter .NET 4.5 ist die maximal instanzierbare Länge eines Byte-Arrays: 2147483591, oder 56 weniger als int.MaxValue. Gefunden über:

for (int i = int.MaxValue; i > 0; i--)
{
    try
    {
        byte[] b = new byte[i];
        Console.Out.WriteLine("MaxValue: " + i);
        Environment.Exit(0);
    }
    catch (Exception ignored)
    {}
}

3voto

Milad Hatami Punkte 1184

Die maximale Länge eines Byte-Arrays beträgt: 2130702268. zum Beispiel:

var countryCodes = new byte[2130702268];

-1voto

steinar Punkte 9140

Ich würde das gar nicht erst tun. Warum sollten Sie den ganzen Speicher für diese In-Memory-Datenbank beiseite legen wollen? Würden Sie nicht lieber eine Datenstruktur verwenden, deren Größe im Laufe der Zeit zunimmt (z.B. List<int> )? Oder (falls gewünscht) eine In-Memory-Datenbank verwenden wie sqlite ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X