2009-08-07 2 views
0

Objective-C 프로젝트에서 나는 많은 양의 데이터를 NSDictionary (최대 ~ 2 기가의 램에 저장되어 있음)에 저장해야합니다. 필자가 수행 한 모든 계산이 끝나면 필요할 때 데이터를 저장 /로드하는 것이 더 빠를 것 같습니다 (원본 파일을 다시 파싱하는 것보다).큰 개체를 파일로 저장

그래서 많은 양의 데이터를 저장하려고합니다. NSKeyedUnarchiver[NSDictionary writeToFile:atomically:]을 사용해 보았지만 둘 다 malloc 오류로 실패했습니다 (____ 바이트를 할당 할 수 없음).

저는 Apple의 Dev 포럼과 Google을 둘러 보았지만 아무 것도 찾을 수 없었습니다. 한 번에 모든 파일 대신 비트 단위로 파일을 만드는 것이 더 좋을지 궁금하지만, 기존 파일에 추가 할 수는 없습니다. 나는 작은 파일들로 절약하는 것에 완전히 반대하지는 않지만 하나의 큰 파일을 사용하는 편이 낫다.

감사합니다.

추가 정보를 포함하도록 편집 : 텍스트 파일에서 모든 정보를 가져 가지 않으므로, 얼마나 많은 오버 헤드가 나에게 줄지 모르겠다. NSDictionary 나는 1.5 기가의 파일을 가지고 있는데 (그 중 ~ 1/2를 유지한다.) 램에서 1 기가를 통해 약 900 메가가되는 것으로 판명되었다. 결국 추가해야 할 데이터가 더있을 것입니다. 그러나 이미 메모리에로드 된 내용을 참조로 생성됩니다. 크기를 두 배로 늘리지 않아도되지만 가까이 올 수 있습니다.

데이터는 모두 연속적이며 저장소에서 분리 될 수 있지만 실행을 위해 모두 메모리에 있어야합니다. 현재 정수/문자열 쌍이 있고 결국 문자열/문자열 쌍 (모든 값이 다른 문자열 집합의 키이기 때문에 결국 최종 저장소 요구 사항은 현재 가지고있는 문자열과 같을 것입니다. 많은 참고 자료).

결국 3 백만 개의 문자열을 다른 문자열 집합과 연결할 필요가 있습니다. 그러나 유일하게 중요한 것은 문자열 간의 관계입니다. 모두 해시 할 수 있지만 NSNumber (NSDictionary은 개체가 필요함) 날 오버 헤드를 줄 수 있습니다.

+0

얼마나 많은 데이터가 데이터이고 NSDictionary의 오버 헤드는 얼마입니까? 이 많은 데이터로 모든 것을 관리하기 위해 손으로 만들어진 코드를 작성하는 것이 좋습니다. 컨텍스트를 제공 할 수 있습니까? 데이터가 계층 적이거나 연속적입니까? 그것은 분리 가능하거나 통합되어 있습니까? –

답변

0

NSDictionary는 적어도 지속성을 위해 찾고자하는 확장 가능한 저장소를 제공하지 않습니다. 자신 만의 데이터 구조/직렬화 프로세스 유형을 구현해야합니다.

포함 된 sqllite 데이터베이스 사용을 고려 했습니까? 그런 다음 데이터를 처리 할 수 ​​있지만 한 번에 데이터 구조의 단편을로드하는 것만 가능합니다.

+0

sqlite 데이터베이스 사용이 효과적입니다. 감사! – bobidden

0

가능한 경우 64 비트 모드에서 응용 프로그램을 다시 빌드하면 훨씬 큰 힙 공간이 제공됩니다.

이것이 옵션이 아니라면, 고유 한 데이터 구조를 만들고 많은 양의 메모리를 할당하지 않는로드/저장 루틴을 정의해야합니다.

+0

올바르지 않습니다. 당신의 GUI는 Leopard에서 64 비트가 될 수 있습니다. – Wevah

+0

또는 그 중 일부가 잘못되었습니다. ;) – Wevah

+0

죄송합니다. 어떤 이유로 64 비트 GUI가 10.6 기능이라고 생각하고있었습니다. 내 대답을 편집했습니다. –

관련 문제