Frage

Auf einem ChipworkX Gerät würden wir lesen Dateien mit:

File.ReadAllBytes(filename);

Aber wenn wir versuchen, dass auf einem Netduino plus die eine viel geringere Menge an Speicher,
wir einfach eine OutOfMemoryException erhalten.

Die Dateien sind nicht so groß, aber ich denke, das ist alles relativ in diesem Fall (1,5 kb max).

Was ist der richtige Weg, um Dateien auf einem Gerät wie diese zu lesen?

War es hilfreich?

Lösung

Verwenden Sie ein FileStream

using (var fileStream = new FileStream(filename, FileMode.Open))
{
    byte[] block = new byte[1024];
    int readLength;
    while ((readLength = fileStream.Read(block, 0, block.Length)) > 0)
    {
        Process(block, readLength);
    }
}

Ihre eigene Process Methode schreiben. Die Blocklänge von 1024 ist nur ein Beispiel, las als große Brocken, wie Sie zu einer Zeit verarbeiten können. Sie können unterschiedlich sein, dass auf die Daten abhängig.

Andere Tipps

Ich gehe davon aus, dass Sie glauben, dass es genügend Speicher sein. Wenn dies so ist, wie ich vermute, dass interne Standardpuffergrößen Dinge wehen. Versuchen Sie explizit Puffergrößen besagt, beim Öffnen der Datei zu halten fest an die tatsächliche Dateilänge:

string path = //some path
byte[] buffer;
int bufferSize = (int)new FileInfo(path).Length;

using (FileStream fs = new FileStream(
    path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize))
{
    buffer = new byte[bufferSize];

    fs.Read(buffer, 0, buffer.Length);
}

//do stuff with buffer 

Wenn Sie ein Gerät mit begrenztem Speicher verwenden, ist es eine gute Idee, einen Puffer zu verwenden, die die Größe eines Sektors ist. Was Sie tun, ist Handelsgeschwindigkeit für Speicher. Wenn Sie wenig Speicher haben, müssen Sie Dinge tun langsamer und ein Sektor ist die kleinste Einheit können Sie verwenden, das macht keinen Sinn.

Ich schlage vor, einen Puffer von 512 Byte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top