라이브러리: DLL 없는 파일 매핑 - 페이지 2

 

알렉스, 파일이 더 이상 필요하지 않을 때 메모리를 어떻게 확보하나요?

제 말은, 파일이 많을 수 있기 때문에 메가 및 기가 단위의 RAM을 삽질하지 않아도 된다는 뜻입니다.

 
CloseHandle이 도움이 되나요?
 
sergeev:

CloseHandle이 도움이 되나요?

CloseHandle은 Close() 내부에서 호출되지만 메모리를 해제하지 않으며, 다시 열면(만들지 않고) 저장된 정보를 가져올 수 있습니다.

이는 RAM이 사용 중임을 의미합니다.

void CMemMapFile::Close()
  {
   if(m_hmem!=NULL) CloseHandle(m_hmem); m_path=""; m_hmem=NULL; m_size=0; m_pos=0; m_mode=-1; // 핸들 닫기
  }
 

메모리 해제 보장을 위해 파일 크기를 0으로 변경하는 것이 더 좋을 것 같습니다.

크기를 늘리려면 크기를 늘리고, 할당된 메모리를 0으로 만들어 파일을 죽이려면 삭제를 추가할 수도 있습니다.

 

고마워요. 꼭 필요한 기능입니다.

그리고 주제에서 벗어난 질문이지만, 최적화할 때 표준 유전학 대신 외부 유전학(예: 터미널에서 실행되는 스크립트)을 사용하도록 파일 매핑을 조정할 수 있나요?

 
joo:

고마워요. 꼭 필요한 기능입니다.

그리고 주제에서 벗어난 질문이지만, 최적화할 때 표준 유전학 대신 외부 유전학(예: 터미널에서 실행되는 스크립트)을 사용하도록 파일 매핑을 조정할 수 있나요?


반자동이 아닌 한, 누군가가 테스터를 시작하고 중단해야 합니다(클라우드를 사용하려는 경우).

클라우드를 사용하지 않으면 테스터를 사용할 필요가 없습니다.

 
Urain:

CloseHandle은 Close() 내부에서 호출되지만 메모리를 해제하지 않으며 다시 열면 (생성하지 않고) 저장된 정보를 검색 할 수 있습니다.

누군가 다시 작성할 때까지 계속 남아 있는 것 같습니다. 저도 이런 일이 발생했습니다. 쓰기 애플리케이션은 핸들을 닫고 읽기 애플리케이션은 닫지 않습니다. 하지만 데이터를 읽을 수는 있습니다. 그러나 Windows에서 일부 작업을 수행하면 파일의 데이터가 변경됩니다.

즉, RAM이 가득 찼습니다.

잘 모르겠습니다.
 

joo:

파일 매핑을 최적화할 때 표준 유전학 대신 외부 유전학(예: 터미널에서 실행되는 스크립트)을 사용하도록 조정할 수 있나요?

중간 데이터를 저장하는 데 파일을 사용한다면 당연히 가능합니다. 중요한 것은 어떤 일이 발생하면 정보가 복구할 수 없을 정도로 손실되기 때문에 일부 기준점에서 데이터를 디스크에 재설정하는 것입니다.
 
sergeev:

누군가 다시 작성할 때까지 계속 남아 있는 것 같아요. 저도 그런 일이 있었어요. 쓰기 애플리케이션은 핸들을 닫고 읽기 애플리케이션은 닫지 않습니다. 하지만 데이터를 읽을 수는 있습니다. 그러나 Windows에서 일부 작업을 수행하면 파일의 데이터가 변경됩니다.

잘 모르겠습니다.
확실한 방법으로 확인해야 할 것 같습니다. 하지만 방법을 모르겠습니다.
 
Urain:

반자동이 아닌 한, 누군가가 테스터를 시작하고 어쨌든 중지해야 합니다(클라우드를 사용하려는 경우).

ZY와 클라우드가 없으면 클라우드가 없는 테스터를 사용하는 것은 의미가 없습니다.

예, claud에 문제가 있습니다....

사용자가 차트에서 스크립트를 실행 한 다음 테스터에서 최적화를 시작한다는 의미입니다 (스크립트는 파일 매핑을 통해 필요한 변수를 최적화 된 Expert Advisor에 "슬립"하기 시작 함). 그리고 최적화를 언제, 어떻게, 어떤 조건에서 중지할지는 또 다른 문제입니다(예를 들어, Expert Advisor가 "준비됨" 플래그를 수신하고 Expert Advisor의 스터핑이 작동을 중지하면 테스터는 유휴 모드에서 나머지 실행을 수행하므로 남은 실행을 빠르게 실행합니다).

이렇게 진행됩니다.