2009-12-23 3 views
4

C#에서 대용량 파일 (> 10M)을 직렬 처리 및 비 직렬화하는 좋은 방법이 있습니까?큰 파일 직렬화 및 비 직렬화

미리 감사드립니다.

+0

파일은 무엇입니까? 당신은 그들을 비 직렬화하고 싶습니까? – SLaks

+0

바이너리 파일입니까? 본문? XML? 전체 파일을 객체 모델로 읽고 싶습니까? –

+1

참고 사항 : http://stackoverflow.com/questions/1941928/best-way-to-store-data-locally-in-net-c/1941970#1941970 –

답변

1

이 질문에 대한 나의 답변 here을 확인하실 수 있습니다. 거기에는 모든 종류의 다른 관련 답변도 있습니다.

내 메서드는 성능을 위해 BinaryReader 및 BinaryWriter를 사용합니다.

최근 프로젝트에서이 방법을 사용하여 50MB 파일을 deserialize하고 내장 직렬 또는 Xml serialization (데이터 세트의 경우 10 분)과 비교하여 매우 빠르게 (5 초 미만) 수행합니다.

1

작은 파일이나 큰 파일의 직렬화/비교에는 차이가 없습니다. 대용량 파일을 메모리로 비 직렬화하지 않도록하면 OOM을 구입할 수 있습니다.

큰 파일은 물론 더 많은 시간이 걸립니다. 이렇게하면 사용자 인터페이스가 응답하지 않는 경우 백그라운드 스레드에서이 처리를 수행 할 수 있습니다. BackgroundWorker는이를위한 전형적인 해결책입니다.

어둠 속에서 무작위로 찍은 사진이 여기 있습니다. 귀하의 질문은 너무 모호합니다.

0

대용량 파일 (실제로는 100MB보다 큼)이있는 경우 가장 좋은 것은 필요한 순간 ​​만로드하는 것입니다.

각 이미지가있는 10.000 명의 고객 목록을 갖고 있다고 가정 해 보겠습니다. 이 목록을 메모리에 보관하는 것은 의미가 없습니다.

예를 들어 파일에있는 모든 성을로드 할 수 있습니다. 따라서 사용자는 사람을 검색 할 수 있으며 그 사람을 정확하게로드 할 수 있습니다.

또 다른 가능성은 처음 10을로드하여 사용자에게 표시하는 것입니다. "다음"버튼을 클릭하자마자 다음 10 개의 정보를로드 할 수 있습니다 - 정보 구성 방법을 계획하십시오.

매우 큰 파일 대신 데이터베이스를 사용하면 몇 가지 이점이 있습니다. 파일 내에서 탐색하는 데 필요한 많은 작업을 추상화 할 수 있습니다.

그러나 BinaryFormatter 등을 사용하는 "Single-Line-Serialization"은 내 의견으로는 그 크기의 파일에서 한계에 도달합니다. 다른 개념을 생각해야합니다.

1

많은 데이터에 대해 직렬화/직렬화가 올바른 접근법입니까? SQLite와 같은 클라이언트 측 데이터베이스가 모든 것을 메모리에로드하는 대신 필요한 정확한 데이터를 쿼리 할 수있는 더 나은 솔루션일까요?