Question

Sur un périphérique ChipworkX on lirait les fichiers en utilisant:

File.ReadAllBytes(filename);

Mais si nous essayons que sur un Netduino Plus qui a une quantité beaucoup plus faible de la mémoire,
nous obtenons simplement un OutOfMemoryException.

Les fichiers ne sont pas grand, mais je pense que tout est relatif dans ce cas (max 1,5 kb).

Quelle est la bonne façon de lire les fichiers sur un appareil comme celui-ci?

Était-ce utile?

La solution

Utilisez un 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);
    }
}

écrire votre propre méthode de Process. La longueur du bloc de 1024 est juste un exemple, lire comme de gros morceaux que vous pouvez traiter à la fois. Vous pouvez faire varier que selon les données.

Autres conseils

Je suppose que vous croyez qu'il devrait y avoir suffisamment de mémoire. Si tel est le cas, je pense que la taille des tampons internes par défaut sont les choses soufflent. Essayez indiquant explicitement la taille des tampons lors de l'ouverture du fichier pour le garder serré à la longueur réelle du fichier:

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 

Lorsque vous utilisez un appareil avec une mémoire limitée, il est une bonne idée d'utiliser un tampon qui est la taille d'un secteur. Ce que vous faites est la vitesse d'échange pour la mémoire. Lorsque vous avez peu de mémoire, vous devez faire des choses plus lentement et un secteur est la plus petite unité, vous pouvez utiliser qui fait sens.

Je suggère un tampon de 512 octets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top