2010-12-16 4 views

답변

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

+0

@TimothyP 또한 ['FileStream.Seek()'] (http://msdn.microsoft.com/en-us/library/dd170233.aspx) 메서드에 유의하십시오. 파일의 알려진 부분 만 읽으면됩니다. –

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 바이트 버퍼를 제안합니다.

관련 문제