IList로 구현 된 거대한 시계열에서 시간순으로 작업을 수행해야합니다. 데이터는 궁극적으로 데이터베이스에 저장되지만 수천만 개의 쿼리를 데이터베이스에 제출하는 것은 의미가 없습니다."메모리에있는"큰 데이터 세트를 저장하기위한 메모리 매핑 파일 IList 구현?
현재 메모리 내 IList는 8 백만 개가 넘는 (작은) 객체를 저장할 때 OutOfMemory 예외를 트리거하지만 수천만 건을 처리해야합니다.
약간의 연구 끝에 디스크에 데이터를 저장하고 IList 래퍼를 통해 데이터에 액세스하는 것이 가장 좋은 방법 인 것처럼 보입니다.
Memory-mapped files (.NET 4.0에 도입)은 올바른 인터페이스처럼 보이지만 IList (쉽게 액세스 할 수 있도록)를 구현하고 내부적으로 메모리 매핑 파일을 처리해야하는 클래스를 작성하는 가장 좋은 방법은 무엇인지 궁금합니다.
다른 방법에 대해 알고 있다면 나는 또한 호기심이 많습니다. 나는 db4o (someone mentionned here)의 데이터를 사용하는 IList 래퍼를 메모리 매핑 파일을 IoAdapterFile로 사용하고 있지만 db4o를 사용하면 아마도 메모리 매핑 파일을 직접 처리하는 것보다 성능 비용이들 것이라고 생각했습니다.
나는 this question을 2009 년에 들러 왔지만 유용한 대답이나 진지한 아이디어를 얻지 못했습니다.
는 메모리 일부만 매핑하는 "슬라이딩 윈도우"의 일종을 사용하는 것을 제외하고)
액세스는 순차적이어야하며 (업데이트를 수행하기 위해 컬렉션을 반복하는), 또한 상대방에서 개체를 삭제/제거 할 수 있어야합니다. –
데이터베이스가이 작업에 적합한 도구입니다. 너무 많은 데이터베이스 호출을 피하려면 일} 처리로 데이터를 갱신하십시오. 또한 맵 감속 스타일 처리에 관심이있을 수 있습니다. – dtb