2010-12-16 7 views
2

На устройстве ChipworkX мы читать файлы с помощью:.NET Framework Micro, чтение файлов на устройстве с ограниченным объемом памяти

File.ReadAllBytes(filename); 

Но если мы попытаемся, что на Netduino Plus, который имеет гораздо меньший объем памяти ,
мы просто получаем исключение OutOfMemoryException.

Файлы не такие большие, но я думаю, что все это относительное в этом случае (максимум 1.5kb).

Каков правильный способ чтения файлов на устройстве?

ответ

5

Используйте 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); 
    } 
} 

написать свой собственный Process метод. Длина блока 1024 - это просто пример, считанный большими кусками, так как вы можете обрабатывать одновременно. Вы можете варьироваться в зависимости от данных.

+0

Я дам ему попробовать :) – TimothyP 2010-12-16 13:40:19

1

Я предполагаю, что вы считаете, что должно быть достаточно памяти. Если это так, я подозреваю, что внутренние размеры буфера по умолчанию дуют. Попробуйте явного указания размера буфера при открытии файла, чтобы держать его крепко к фактической длине файла:

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 
0

При использовании устройства с ограниченным объемом памяти, это хорошая идея использовать буфер, который является размером сектор. То, что вы делаете, - это скорость торговли для памяти. Когда у вас мало памяти, вы должны делать что-то медленнее, а сектор - это наименьшая единица, которую вы можете использовать, что имеет смысл.

Предлагаю буфер объемом 512 байт.