在chipworkx设备上,我们将使用以下方式读取文件:

File.ReadAllBytes(filename);

但是,如果我们在内存少得多的NetDuino Plus上尝试一下,
我们只是获得了一个OutofMemoryException。

这些文件并不大,但我想在这种情况下这都是相对的(最大1.5kb)。

在这样的设备上读取文件的正确方法是什么?

有帮助吗?

解决方案

用一个 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个字节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top