.NETマイクロフレームワーク、メモリが制限されているデバイス上のファイルを読み取る
-
10-10-2019 - |
質問
chipworkxデバイスでは、以下を使用してファイルを読み取ります。
File.ReadAllBytes(filename);
しかし、メモリの量がはるかに少ないNetDuino Plusでそれを試してみると、
OutMemoryExceptionを取得するだけです。
ファイルはそれほど大きくはありませんが、この場合はすべて相対的なことです(1.5kb max)。
このようなデバイスでファイルを読む正しい方法は何ですか?
解決
使う 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のブロック長は単なる例であり、一度に処理できる限り大きなチャンクを読みます。データによって異なる場合があります。
他のヒント
私はあなたが十分な記憶があるべきだと信じていると仮定しています。これがそうであれば、内部デフォルトのバッファサイズが物事を吹き飛ばしているのではないかと思います。ファイルを開くときにバッファサイズを明示的に記載して、実際のファイルの長さまでしっかりと保持してみてください。
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
メモリが限られているデバイスを使用している場合、セクターのサイズのバッファーを使用することをお勧めします。あなたがしていることは、メモリを交換することです。メモリがほとんどない場合は、よりゆっくりと物事を行う必要があり、セクターが使用できる最小のユニットです。
512バイトのバッファーをお勧めします。
所属していません StackOverflow