2017-01-31 5 views
1

size {filebyte}에 파일 크기가 1.5GB입니다. 나는 유사 하나 개의 인스턴스 인스턴스의 전체 파일을 읽을 수 델파이의Interystems의 Cache를 사용하여 전체 파일 바이트를 한 번에 읽으십니까?

bytedata:=filebyte.readallbytes(filename); 

그 결과 하나 개의 인스턴스에서이 요소의 개수가 높은 것을 가진이 ByteArray (bytedata) - 낮은 (bytedata) +1있을 것이라는 점을 인 . 캐시에 동등한 코드가 있습니까? 1.5G 크기의 파일을 캐시의 메모리에 보관할 수 있습니까? 데이터를 분석하는 작업은 전체 파일이 한 번에 메모리에 있어야하므로 블록 단위로 파일을 읽지 않으려합니다. 감사합니다.

답변

1

필요한만큼 많은 데이터를 읽을 수 있습니다. 여기서 문제는 지역 변수에 저장할 수있는 양입니다. 3,641,144 바이트 달 수 긴 문자열 32,767 바이트 의해

set fs=##class(%Stream.FileCharacter).%New() 
set fs.Filename="c:\test.txt" 
set length=fs.Size 
set data=fs.Read(length) \\ if size no more than 3.5Mb 

로컬 변수 크기 limited. 그리고 프로세스 당 최대 2012.1 메모리는 48MB로 제한되었습니다. 그리고 2012.2에서는 변경되었으며 2 terabytes per process까지 설정할 수 있으며 특수 변수가 $zstorage 인 현재 프로세스에 대해 프로그래밍 방식으로 실시간으로 설정할 수 있습니다.

+0

예에서 변수 데이터가 전체 파일을 보유합니까? 그렇다면 하위 요소에 어떻게 액세스합니까? –

+0

예, 전체 콘텐츠를 갖지만 하위 요소는 무엇을 의미합니까? – DAiMor

+0

파일이 (1-4) 배타적 인 의지 데이터 (1) = 2, 데이터 (2) = 4 .... 데이터 (999) = 1, 데이터 (1000) = 4 또는 data = 2421123 ..... 14 여기서 14는 999 및 1000 번째 바이트입니다. 후자의 경우 개별 바이트를 쉽게 조작 할 수 없으며 한 번에 하나의 값을 읽는 전체 파일을 읽는 데 장점이 없습니다. 내 delphi 예제에서 bytedata : = filebyte.readallbytes (filename) bytedata는 0에서 length-1까지의 값을 가진 배열이고 bytedata [0] = 2, bytedata [2] = 4, bytedata [998] = 1 그리고 bytedata [ 999] = 4이다. 캐시에 비슷한 작업이 있습니까? –