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

 
Vladislav Andruschenko :


한 번 그런 문제에 직면했습니다. 많은 수정을 했습니다. 나는 모든 것을 기억하지 못합니다. 그것은 일회성 작업이었습니다.

하지만 여기서 ArrayResize (arrRead_01,arrSize)를 설정해 보십시오. 세 번째 매개변수


    정수      Reserve_size=0          // 예약 크기 값(초과)


실험.

고맙지만 실험에 따르면 모든 브레이크와 메모리 소비는 파일에서 정보를 읽는 클래스에 속합니다. 아마도 고칠 것이 있습니까?

 
두 번째 질문인 쓰기 제한에 대해 도움을 받고 싶습니다. 누군가 이 문제를 해결했습니까?
 

메모리 재할당 속도로 판단하면 문자열 배열은 객체에 대한 포인터가 아니라 객체의 배열로 저장되므로 브레이크가 걸립니다. 개발자는이 문제를 명확히해야하며 결정은 그것에 달려 있습니다.

그런 다음 파서는 문자열에서 셀의 로컬 배열을 만든 다음 할당된 메모리 에 복사합니다. 추가 목발과 중요한 메모리입니다.

객체의 배열인 경우 작업의 셀 업데이트 빈도와 수에 따라 로드할 때 파일을 구문 분석하지 않고 csv 파일을 파일 문자열의 배열로 저장하고 업데이트하는 시간이 더 저렴할 수 있습니다. 즉석에서 데이터(즉, 셀에 액세스할 때마다 문자열 구문 분석). 어쨌든 praser는 다시 작성해야 하며 매우 비효율적이며 인용된 셀을 지원하지 않으며 숫자 테이블을 가져오는 데에만 적합합니다.

 
SeriousRacoon :

메모리 재할당 속도로 판단하면 문자열 배열은 객체에 대한 포인터가 아니라 객체의 배열로 저장되므로 브레이크가 걸립니다. 개발자는이 문제를 명확히해야하며 결정은 그것에 달려 있습니다.

개발자 할당된 메모리 에 복사합니다. 추가 목발과 중요한 메모리입니다.

어떻게 제거할 수 있습니까?

심각한 너구리 :

객체의 배열인 경우 작업의 셀 업데이트 빈도와 수에 따라 로드할 때 파일을 구문 분석하지 않고 csv 파일을 파일 문자열의 배열로 저장하고 업데이트하는 시간이 더 저렴할 수 있습니다. 즉석에서 데이터(즉, 셀에 액세스할 때마다 문자열 구문 분석). 어쨌든 praser는 다시 작성해야 하며 매우 비효율적이며 인용된 셀을 지원하지 않으며 숫자 테이블을 가져오는 데에만 적합합니다.

"파일 줄 배열" - 무슨 뜻인가요? 모든 문자열이 쓰여질 배열을 만드는 것에 관한 것이라면 내가 이해하는 한 문자열의 길이에는 문자 수에 제한이 있습니다. 아니요?

읽기 수업은 MQ 직원이 작성했는데 거기에 모든 것이 잘 쓰여 있다고 생각했습니다.

파서는 텍스트를 올바르게 읽습니다. 여기에 동의하지 않습니다. 이전에 첨부된 스크립트가 이를 확인합니다.

 
Aleksey Vyazmikin :

개발자 @Renat Fatkhullin 에게 전화를 걸어 보겠습니다. 상황을 설명할 수 있습니까?

어떻게 제거할 수 있습니까?

"파일 줄 배열" - 무슨 뜻인가요? 모든 문자열이 쓰여질 배열을 만드는 것에 관한 것이라면 내가 이해하는 한 문자열의 길이에는 문자 수에 제한이 있습니다. 아니요?

읽기 수업은 MQ 직원이 작성했는데 거기에 모든 것이 잘 쓰여 있다고 생각했습니다.

파서는 텍스트를 올바르게 읽습니다. 여기에 동의하지 않습니다. 이전에 첨부된 스크립트가 이를 확인합니다.

내부에 구분 기호가 있는 따옴표 붙은 문자열이 없는 파일을 올바르게 읽습니다. 60;""sample;string""을 읽어보십시오. 출력은 [60] 및 [샘플;문자열]의 2개 셀이어야 합니다. 그리고 그것은 분명히 3 - [60] [""샘플] [문자열""]이 될 것입니다. (ZY 게다가 따옴표로 묶인 문자열의 하이픈 넣기는 ksv에서 허용됩니다 :) )

C 또는 플러스에서 이것을 제거하는 방법을 알고 있습니다. 먼저 문자열에 포인터 배열을 할당하고 문자열을 구문 분석하여 채우겠습니다. µl에는 포인터가 없습니다. 이 문제에 접근하는 방법을 알 수 없습니다. 레나트가 해명할 수 있기를 바랍니다.

"파일 줄 배열" - 무슨 뜻인가요? 모든 문자열이 쓰여질 배열을 만드는 것에 관한 것이라면 내가 이해하는 한 문자열의 길이에는 문자 수에 제한이 있습니다. 아니요?

파일을 한 줄씩 읽고 파일의 각 소스 줄을 구문 분석하지 않고 배열에 저장합니다. 형식(행, 열)으로 문자열에 액세스할 때 문자열 행을 가져와 즉석에서 구문 분석하고 값 열을 제공하여 구문 분석 결과를 캐싱합니다.

 

여기에 또 다른 가능한 해결책이 있습니다. 파일을 읽을 때 예비 분석을 수행합니다. 각 행에 대해 두 개의 정수 값 배열을 저장합니다. 행의 셀 값이 시작되는 문자의 인덱스와 이 부분 문자열의 길이입니다.

예를 들어:

строка в файле : 54;345;12;12345
индекс символа : 0  3   7  10
длина подстроки: 2  3   2  5

다음은 인덱스와 길이의 값이며 요청 시 추가 구문 분석을 위해 저장합니다.
 
SeriousRacoon :

내부에 구분 기호가 있는 따옴표 붙은 문자열이 없는 파일을 올바르게 읽습니다. 60;""sample;string""을 읽어보십시오. 출력은 [60] 및 [샘플;문자열]의 2개 셀이어야 합니다. 그리고 그것은 분명히 3 - [60] [""샘플] [문자열""]이 될 것입니다. (ZY 게다가 따옴표로 묶인 문자열의 하이픈 넣기는 ksv에서 허용됩니다 :) )

그리고 분명히 CSV 표준의 그러한 미묘함에 대해 알지 못했습니다. 기능을 설명해주셔서 감사합니다!

심각한 너구리 :

C 또는 플러스에서 이것을 제거하는 방법을 알고 있습니다. 먼저 문자열에 포인터 배열을 할당하고 문자열을 구문 분석하여 채우겠습니다. µl에는 포인터가 없습니다. 이 문제에 접근하는 방법을 알 수 없습니다. 나는 Renat가 명확히 할 수 있기를 바랍니다.

Renat이 명확히 할 수 있기를 바랍니다.

심각한 너구리 :

파일을 한 줄씩 읽고 파일의 각 소스 줄을 구문 분석하지 않고 배열에 저장합니다. 형식(행, 열)으로 문자열에 액세스할 때 문자열 행을 가져와 즉석에서 구문 분석하고 값 열을 제공하여 구문 분석 결과를 캐싱합니다.

네, 캐시가 특별히 필요하지 않아도 시간적으로는 최적이 아닐까 생각합니다. 이 접근 방식을 구현하기 위해 클래스를 적절하게 변경하고 도울 수 있습니까?

 
SeriousRacoon :

여기에 또 다른 가능한 해결책이 있습니다. 파일을 읽을 때 예비 분석을 수행합니다. 각 행에 대해 두 개의 정수 값 배열을 저장합니다. 행의 셀 값이 시작되는 문자의 인덱스와 이 부분 문자열의 길이입니다.

예를 들어:

строка в файле : 54;345;12;12345
индекс символа : 0  3   7  10
длина подстроки: 2  3   2  5

다음은 인덱스와 길이의 값이며 요청 시 추가 구문 분석을 위해 저장합니다.

네, 저는 오늘 위에서 이 접근 방식에 대해 썼습니다. 처음부터 무엇을 위해 무엇을 계산 하고 배열을 채우려면 . 하지만 어떻게 할 수 있는지 모르겠습니다 :(

 

WriteArray / Read는 최대입니다. 크기가 300MB에 도달하면 모든 것이 매우 빠르게 일어나고 RAM이 먹지 않습니다.

읽기/쓰기용 코드가 많은 이유는 무엇입니까? 모든 것이 4줄로 수행됩니다.

 
Maxim Dmitrievsky :

WriteArray / Read는 최대입니다. 크기가 300MB에 도달하면 모든 것이 매우 빠르게 일어나고 RAM이 먹지 않습니다.

읽기/쓰기용 코드가 많은 이유는 모든 것이 4줄로 수행됩니다.