와 장치에서 파일을 읽는 것은 우리가 사용하는 파일을 읽을 것 ,
단순히 OutOfMemoryException을 얻습니다..NET 마이크로 프레임 워크는 ChipworkX 장치에 제한된 메모리
파일 크기는 크지 않지만,이 경우 상대적인 것 같습니다 (최대 1.5kb).
이와 같은 장치에서 파일을 읽는 올바른 방법은 무엇입니까?
와 장치에서 파일을 읽는 것은 우리가 사용하는 파일을 읽을 것 ,
단순히 OutOfMemoryException을 얻습니다..NET 마이크로 프레임 워크는 ChipworkX 장치에 제한된 메모리
파일 크기는 크지 않지만,이 경우 상대적인 것 같습니다 (최대 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 바이트 버퍼를 제안합니다.
시도해 보겠습니다. – TimothyP
@TimothyP 또한 ['FileStream.Seek()'] (http://msdn.microsoft.com/en-us/library/dd170233.aspx) 메서드에 유의하십시오. 파일의 알려진 부분 만 읽으면됩니다. –