C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[55849] Re:바이너리 파일에서 데이터 빨리 읽어오기..
남병철.레조 [lezo] 1257 읽음    2009-01-20 23:05
일단 new 혹은 GlobalAlloc 같은 것으로 미리 사용할 공간을 넉넉히 확보하세요.
(일종의 pool처럼 이미 할당되어 있는 메모리 블록을 사용하게 되겠네요.)

어떤 작업을 해야하는지 모르겠지만 전체를 메모리에 올리는 시간을 줄이긴 어려울 것입니다.
물론 스트림 크기를 늘일 수 있으면 파일 자체에서 손을 데어도 크게 느리진 않을것입니다.
하지만 한번에 다 올리는걸로봐서 이미지 프로세싱류의 작업일듯한데 프로세싱 관련 작업은
다른 쓰레드에서 메모리에 필요한 만큼 올려서 작업하는등의 방법으로 작업의 효율성을 높일 순 있을듯합니다.

큰 블록으로 메모리를 잡게되면 순간적으로 해당 블록이 없을 수 있습니다.
그럼 bad_alloc 같은 예외처리가 나타납니다.
처음 말한것 처럼 미리 크기를 확보하고 프로그램을 시작하시는게 좋습니다.



이용태 님이 쓰신 글 :
: 바이너리 파일이 있습니다.
:
: 파일 사이즈는...
:
: sizeof(unsigend char)*500*500*1750 = 437500000 bit = 417.2MByte 입니다.
:
: 이 데이터를 한번에 읽어서 메모리에 올릴려고 하는데요...
:
: 다음과 같이 해봤는데... 메모리에 데이터를 복사하는 시간이 5~10초 정도 걸립니다.
:
: //<-- 파일 열고
: pOpenStream->Seek(HEADER_SIZE,soFromBeginning);
: //동적으로 메모리 생성하고
: pFullData = new unsigned char[1750*500*500];
: //파일에서 데이터 읽어온다. 이부분에서 5~10초 정도 걸립니다.
: pOpenStream->Read((void*)pFullData, sizeof(unsigned char)*1750*500*500);
:
: 이것을 좀더 시간을 단축시켜 빨리 메모리에 올릴 수 있는 방법이 있을까요?
:
: 아.. 그리고.. 가끔씩 new로 데이터 메모리 할당할때도 bad_alloc() 어쩌구 저쩌구 하면서 에러가 뜨던데요.. 메모리에 할당을 못해서 뜨는 에러겠죠?
: 제 컴터 메모리가 2G인데... 충분히 용량 남아있는데도 불구하고... 할당 못할때가 있더라구요...
: 이건 또 왜 그런건지요?
:
: 답변 부탁드립니다..

+ -

관련 글 리스트
55842 바이너리 파일에서 데이터 빨리 읽어오기.. 이용태 1263 2009/01/20
55857     Re:바이너리 파일에서 ... 가장빨리 읽어오는 방법은.. 읽어오지 않는것이죠.. 장성호 1772 2009/01/21
55863         Re:Re:답변을 보고 갑자기 궁금한 내용이 생겨서요~! danga80 1472 2009/01/21
55856     Re:바이너리 파일에서 데이터 빨리 읽어오기.. st8123 1625 2009/01/21
55849     Re:바이너리 파일에서 데이터 빨리 읽어오기.. 남병철.레조 1257 2009/01/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.