MT5 RAM의 메모리 폭식, 대용량 파일 읽기/쓰기 문제 - 페이지 5

 
Maxim Dmitrievsky :

음, 그것은 2차원 배열, 행렬입니다. 받아 적어

다차원 배열 을 읽고 쓰는 방법의 예를 보여줄 수 있습니까? 이론상으로는 명확하지만 구현은 명확하지 않습니다.

 
Aleksey Vyazmikin :

다차원 배열 을 읽고 쓰는 방법의 예를 보여줄 수 있습니까? 이론상으로는 명확하지만 구현은 명확하지 않습니다.

1차원과 마찬가지로 WriteArray()를 통해

 
Aleksey Vyazmikin :

클래스를 사용하는 것이 편리합니다. MT4로도 이미 3년 동안 사용하고 있습니다. 편리하지만 젠장, 느리게 작동합니다.

물론 한 줄을 읽는 것은 간단하지만 작동하는 세포 구조로 바꾸는 것은 훨씬 더 어렵습니다.

수업을 사용할 수 없다는 것은 무엇을 의미합니까? 게다가 직원이 이 클래스를 작성한 메타 인용문을 사용합니다. 그런 다음 실제로 사람을 고용하고 완제품을받을 것으로 예상하고 지불했지만 브레이크는 정상이라고 말했습니다 ... 나는 믿었지만 지금은 너무 많은 기억이 있습니다. 분노합니다.

이 클래스는 작은 파일용으로 설계되었습니다. 누가 이 클래스를 만들었는지는 중요하지 않습니다. 이제 클래스가 이 파일에 잘 대처하지 못하도록 파일을 읽는 다른 접근 방식이 필요합니다.

 
Roffild :

이 클래스는 작은 파일용으로 설계되었습니다. 누가 이 클래스를 만들었는지는 중요하지 않습니다. 이제 클래스가 이 파일에 잘 대처하지 못하도록 파일을 읽는 다른 접근 방식이 필요합니다.

나는 영속할 것이다. 젠장, 고마워.

 
Maxim Dmitrievsky :

1차원과 마찬가지로 WriteArray()를 통해

예제를 찾았습니다. 시도해야 합니다. 일반적인 이해와 처리 속도를 높이기 위해 두 개의 파일을 작성해야 합니다.

고맙습니다.

추가됨: 한 번에 하나의 배열만 쓸 수 있다는 것을 이해합니다. 물론 그다지 편리하지는 않습니다.
 
Roffild :

이 클래스는 작은 파일용으로 설계되었습니다. 누가 이 클래스를 만들었는지는 중요하지 않습니다. 이제 클래스가 이 파일에 잘 대처하지 못하도록 파일을 읽는 다른 접근 방식이 필요합니다.

내 기억이 맞다면 즉시 대용량 파일로 작업해야 한다고 말했습니다. 예를 들어 큰 파일이 주어졌습니다. 수백 메가바이트는 아니더라도 수십 메가바이트입니다(서신을 살펴봐야 하지만 이것은 현재 형식에서는 편리하지 않음).

 
Aleksey Vyazmikin :

예제를 찾았습니다. 시도해야 합니다. 일반적인 이해와 처리 속도를 높이기 위해 두 개의 파일을 작성해야 합니다.

고맙습니다.

추가됨: 한 번에 하나의 배열만 쓸 수 있다는 것을 이해합니다. 물론 그다지 편리하지는 않습니다.

아주 편안하게 :)

 
Maxim Dmitrievsky :

아주 편안하게 :)

서로 다른 데이터 유형 에 대해 별도의 파일을 생성해야 하기 때문에 편리하지 않습니다.

 
Aleksey Vyazmikin :

서로 다른 데이터 유형 에 대해 별도의 파일을 생성해야 하기 때문에 편리하지 않습니다.

글쎄, 당신은 그들이 흩어지지 않도록 하나의 디렉토리로 운전할 수 있습니다. 그리고 문제가 없습니다. 이것이 내가 전문가들을 위해 항상 하는 일입니다. 나는 즉시 program_name / account_number 디렉토리 생성을 씁니다. 모든 파일을 드라이브에 넣습니다.

 

메모리 재할당이 덜 자주 수행되도록 먼저 최소한의 변경을 수행하는 것이 좋습니다. 두 줄

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. 어쩌면 이것은 이미 당신에게 충분합니다.