먼저 스크립트는 각 열에 대한 데이터 형식을 생성합니다. 열 6. 그런 다음 1000000 행이 테이블에 추가 된 다음 0에서 999999 사이의 숫자로 채워집니다. 데이터 형식에 따라 숫자는 다른 방식으로 인식 될 수 있습니다. 그런 다음 모든 것이 파일에 저장됩니다.
먼저 스크립트는 각 열에 대한 데이터 형식을 생성합니다. 열 6. 그런 다음 1000000 행이 테이블에 추가 된 다음 0에서 999999 사이의 숫자로 채워집니다. 데이터 형식에 따라 숫자는 다른 방식으로 인식 될 수 있습니다. 그런 다음 모든 것이 파일에 저장됩니다.
메모리 재할당이 덜 자주 수행되도록 먼저 최소한의 변경을 수행하는 것이 좋습니다. 두 줄
m_total_rows++;
ArrayResize (m_cells,m_total_rows*m_total_columns, 10000 );
bool CSVReader::AddData( 문자열 data_str, bool 헤더)에서 다음으로 대체
m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize (m_cells,2*m_total_rows*m_total_columns);
복사를 통한 메모리 재할당 횟수는 O(n) 대신 O(log(n,2))여야 합니다. 600,000 대신 20. 어쩌면 이것은 이미 당신에게 충분합니다.
고맙습니다! 무슨 일이 있었는지 알려주세요:
1. 메모리에는 변경 사항이 없습니다. 현재 코드는 여기저기서 10GB의 RAM을 먹었습니다.
2. 속도별:
2.1 구버전 574초
2.2 새 버전 138초
4배 증가한 것으로 나타났습니다. 이는 매우 좋은 일입니다! 그러나 메모리는 백투백이며 로드해야 하는 모든 것과는 거리가 멉니다....
아주 편안하게 :)
CSV를 날짜를 뺀 바이너리로 변환했습니다.
작동 중에 메모리 스크립트가 1GB를 먹었는데, 이는 10에 비해 매우 좋습니다. 그래도 양이 많아요 :)
속도 면에서 - 단 16초! 아주 멍청하지 않아!
메모리 재할당이 덜 자주 수행되도록 먼저 최소한의 변경을 수행하는 것이 좋습니다. 두 줄
m_total_rows++;
ArrayResize (m_cells,m_total_rows*m_total_columns, 10000 );
bool CSVReader::AddData( 문자열 data_str, bool 헤더)에서 다음으로 대체
m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize (m_cells,2*m_total_rows*m_total_columns);
복사를 통한 메모리 재할당 횟수는 O(n) 대신 O(log(n,2))여야 합니다. 600,000 대신 20. 어쩌면 이것은 이미 당신에게 충분합니다.
사실 ArrayResize() 의 세 번째 매개변수는 그렇게 지정하기가 쉽지 않습니다... 젠장 변경...
문서 읽기
사실 ArrayResize()의 세 번째 매개변수는 그렇게 지정하기가 쉽지 않습니다... 젠장 변경...
문서 읽기
메모리 .csv로 들어 올리는 문제가 다른 프로그램에서 생성되고 임의의 크기를 가질 때 이 경우에 유용한 세 번째 매개변수에 대한 문서에서 무엇을 수집했습니까?
바이너리 검색보다 더 나은, 쓰레기가 아닌 성능 향상 메모리 재할당( ArrayResize에 대한 호출 수 줄이기 )을 자유롭게 제안하십시오...
고맙습니다! 무슨 일이 있었는지 알려주세요:
1. 메모리에는 변경 사항이 없습니다. 현재 코드는 여기저기서 10GB의 RAM을 먹었습니다.
2. 속도별:
2.1 구버전 574초
2.2 새 버전 138초
4배 증가한 것으로 나타났습니다. 이는 매우 좋은 일입니다! 그러나 메모리는 백투백이며 로드해야 할 모든 것과는 거리가 멉니다....
읽은 후 bool CSVReader::Load( int start_line) 행 뒤
파일 닫기 (파일 핸들);
여유 메모리 삽입
배열 크기 조정 (m_cells,m_total_rows*m_total_columns);
m_cells가 차지하는 메모리의 불필요한 0-50%를 해제합니다. 셀의 내용 없이 m_cells 자체만.
이제 CSV로 빠른 작업을 위해 작은 라이브러리를 만들고 있습니다.
화면에는 7초가 소요되는 작업 테스트가 있습니다!!! Xeon 프로세서, 3.0 주파수.
먼저 스크립트는 각 열에 대한 데이터 형식을 생성합니다. 열 6. 그런 다음 1000000 행이 테이블에 추가 된 다음 0에서 999999 사이의 숫자로 채워집니다. 데이터 형식에 따라 숫자는 다른 방식으로 인식 될 수 있습니다. 그런 다음 모든 것이 파일에 저장됩니다.
파일 크기 65.4MB 메모리의 전체 구조는 232MB를 차지했습니다.
CSV를 날짜를 뺀 바이너리로 변환했습니다.
작동 중에 메모리 스크립트가 1GB를 먹었는데, 이는 10에 비해 매우 좋습니다. 그래도 양이 많아요 :)
속도면에서 - 단 16초! 아주 멍청하지 않아!
글쎄, 대본 자체는 여전히 서툴다.
읽은 후 bool CSVReader::Load( int start_line) 행 뒤
파일 닫기 (파일 핸들);
여유 메모리 삽입
배열 크기 조정 (m_cells,m_total_rows*m_total_columns);
m_cells가 차지하는 메모리의 불필요한 0-50%를 해제합니다. 셀의 내용 없이 m_cells 자체만.
감사합니다. 그러나 파일을 닫고/스크립트를 마친 후에는 어쨌든 메모리가 빠르게 해제됩니다. 작동 중 소비를 줄이는 방법은 다음과 같습니다....
이제 CSV로 빠른 작업을 위해 작은 라이브러리를 만들고 있습니다.
화면에는 7초가 소요되는 작업 테스트가 있습니다!!! Xeon 프로세서, 3.0 주파수.
먼저 스크립트는 각 열에 대한 데이터 형식을 생성합니다. 열 6. 그런 다음 1000000 행이 테이블에 추가 된 다음 0에서 999999 사이의 숫자로 채워집니다. 데이터 형식에 따라 숫자는 다른 방식으로 인식 될 수 있습니다. 그런 다음 모든 것이 파일에 저장됩니다.
파일 크기 65.4MB 메모리의 전체 구조는 232MB를 차지했습니다.
매우 흥미로운. 프로그래밍 성과를 공개적으로 발표할 계획입니까?
글쎄, 대본 자체는 여전히 서툴다.
무엇을 고칠 수 있는지 말해 줄 수 있습니까?