바이너리 (파일) 데이터 처리에 어려움을 겪고 있습니다 (C#의 경우). (둘 다 32을 실행하는 2 기가 바이트 램과 느린 노트북을 가정 '충돌하는'바이너리 형식에 대한 빠른 이진 읽기 및 쓰기 문제
- 내가 메모리에 맞게 1메가바이트만큼 작고 60기가바이트만큼 큰, 따라서 불가능할 수있는 이진 파일이 :이 상황 및 64 비트 창). 이 파일에는 예를 들어 시간 기준으로 20 개의 소스의 데이터가 들어 있습니다. 파일의 헤더는 신호 길이에 대해 알려주지 않으므로 각 신호의 길이가 다를 수 있습니다 (그리고 대부분의 wime이 다를 수 있음). 따라서 하나의 신호가 포핸드에 들어있는 바이트 수를 알지 못합니다. 또한 데이터가 파일에 따라 불규칙적으로 배치되어 있습니다. 따라서 해당 신호 샘플과 일치하는 파일에서 식별자 (2 바이트)를 검색해야합니다.
두 번째로이 데이터를 처리하여 새로운 바이너리 파일에 저장해야합니다. 파일 크기는 대략 동일합니다. 그러나 이진 형식은 완전히 다릅니다. 사실 그것은 Matlab 바이너리 파일 형식입니다. matlab에 바이너리 내가 포핸드의 길이를 알 필요가 신호의 헤더 (바이트 수로 주어) 신호 길이를 필요로하기 때문에
- :
이
은 도전이다. 또는 마지막에 서면 바이너리를 찾아 길이를 저장하십시오.- 성능이 정말 좋을 필요가 있습니다. 대상이 하드 디스크의 r/w 속도에 근접하고 있으므로 CPU 시간이 짧아야합니다.
- 데이터가 내부 메모리에 맞지 않으므로 정렬 블록 현명한 처리가 필요합니다. 하지만 성능을 희생하지 않으면 서 메모리 오버 플로우 예외가 발생하지 않도록 블록 크기를 올바르게 제한하는 방법은 무엇입니까?
이미 파일의 메모리 매핑을 읽으려고했지만 신호의 길이를 알기 위해 전체 파일을 검색해야하므로이 문제에 봉착했습니다.
위의 작업을 수행하는 좋은 방법은 무엇입니까?
바이너리 파일에 저장할 수 있도록 신호 길이를 결정해야합니다. 너는 넓다. 신호 강도를 결정할 수 있습니까? 결정할 수 없다면이 질문을 할 수 있습니다. 현재 읽고 쓰고있는 코드 (16 진수)를 포함하여 현재 사용하고있는 코드를 게시하십시오. 형식과 모든 필드를 설명하여 도움을 받으십시오. 내 관점에서 당신이 걱정해야 할 유일한 성능 매트릭스는 하드 디스크 자체에 완전히 의존하는 새 파일을 얼마나 빨리 작성할 수 있는지입니다. 따라서 문제를 "해결"할 수 있습니다. –
Ramhound와 usr에게 감사드립니다. 신호의 길이를 잘 판단하는 것이 문제의 큰 부분입니다. 이 방법은 메모리에있는 동적 배열 (리스트)에 신호를로드하거나 식별자와 해당 신호를 찾는 바이너리 파일 (예 : 60GB)을 검색해야하므로 각 신호마다 바이트 길이를 누적해야합니다. 신호)를 읽은 다음 데이터 읽기 및 쓰기를 시작합니다. 이것은 파일의 모든 바이트가 적어도 2 번 읽혀지기 때문에 시간이 걸립니다. 아니면 누군가가 이것을 빨리 할 수있는 방법을 알고 있습니까? – wlamers