Ich muss riesige Arrays von Longs (bis zu 5 GB) auf die Festplatte schreiben.
Ich habe versucht, BinaryFormatter
zu verwenden, aber es scheint in der Lage zu sein, nur Arrays der Größe kleiner als 2GB zu schreiben:
Dieser Code löst IndexOutOfRangeException
für größere Arrays aus.
Ich möchte Element pro Element nicht speichern, weil es zu viel Zeit braucht. Gibt es einen geeigneten Weg, um solch ein großes Array zu speichern?
Schreibelement pro Element:
%Vor%Das ist sehr langsam.
OK, vielleicht habe ich ein wenig mit dem MMF über Bord getragen. Hier ist eine einfachere Version mit nur einem Dateistream (ich denke, das hat Scott Chamberlain in den Kommentaren vorgeschlagen).
Timings (auf einem neuen System) für ein 3Gb-Array:
Code:
%Vor%Alte Lösung, MMF
Ich denke, Sie können es mit einer MemoryMappedFile versuchen. Ich habe ~ 2 bis ~ 2,5 Minuten für ein 3Gb-Array auf einem relativ langsameren externen Laufwerk.
Was diese Lösung beinhaltet:
Beachten Sie, dass Sie den Fall berücksichtigen müssen, wenn die Array-Länge kein Vielfaches von chunkLength
ist. Zu Testzwecken ist es in meinem Beispiel :).
Siehe unten:
%Vor%Ich schlage vor, dass der obige Code falsch ist. Sollte es nicht
sein %Vor%Dasselbe gilt für das Speicherabbildungsbeispiel
Tags und Links arrays c# binaryformatter