오류, 버그, 질문 - 페이지 1628

 
HistoryOrderGetInteger(OrderTicket, ORDER_TIME_DONE_MSC ) - 테스터에서 0을 반환합니다!
 

전문가가 파일을 여는 동안 오류가 발생했습니다. 그리고 예를 들어

1. "일부 관련 없는 코드" 제거(아래 참조)

2. 또는 제거 ::Sleep(1000)

그러면 오류가 발생하지 않습니다

 //Test.mq5
#import "Test001.ex5"
         string f( string file );
#import
string __Period() { return StringSubstr ( EnumToString (( ENUM_TIMEFRAMES ) Period ()), 7 ); }
void OnInit ()
{
         Print ( Symbol (), "," , __Period(), ", результат=" , f( "test.txt" ));
}

시퀀싱:

1. 새 프로필 만들기(예: "테스트")

2. Test.ex5 전문가를 두 차트에 연결하여 두 개의 새 차트를 엽니다(그림 참조).

4. 다른 기존 프로필 선택

5. 프로필 "테스트" 선택

결과:

Test001.mq5는 다음과 같습니다.

 //Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        :: ResetLastError ();
         int hFile = :: FileOpen ( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
         if ( hFile == INVALID_HANDLE )
                 return :: StringFormat ( "Error(%d): Не был открыт файл: %s" , :: GetLastError (), file );
        :: Sleep ( 1000 );
        :: FileClose ( hFile );
         return "OK" ;
}
파일:
Test001.ex5  16 kb
 

test.txt 파일 자체는 메시지에 첨부되지 않았지만 다음과 같이 보입니다.

추가 정보: FILE_COMMON 의 의미에서 열려 있는 파일의 위치 - 오류에 영향을 미치지 않습니다.

 
Andrey Barinov :

이것은 코드 최적화입니다.

metaeditor.ini 필드 [Experts]에 OPTIMIZE=0을 쓰면 컴파일 속도는 4-ke와 동일합니다. 컴파일하는 데 20초가 걸리는 일부 프로젝트가 있으며 일부는 끝없는 최적화 주기에 포함됩니다. :)

와우, 고마워 친구! 전에 어디 있었어! ) 그리고 우리는 여기서 고통 받고 있습니다 ... 가장 이상한 것은 개발자가이 옵션에 대해 침묵했다는 것입니다
 
Alexey Navoykov :
와우, 고마워 친구! 전에 어디 있었어! ) 그리고 우리는 여기서 고통 받고 있습니다 ... 가장 이상한 것은 개발자가이 옵션에 대해 침묵했다는 것입니다

그들은 침묵하지 않았습니다. 포럼 에는 이 옵션이 방금 설명된 18페이지의 주제가 있습니다.

그런데 디버깅을 위해 컴파일할 때 최적화는 포함되지 않습니다.

 
Andrey Barinov :

이것은 코드 최적화입니다.

metaeditor.ini 필드 [Experts]에 OPTIMIZE=0을 쓰면 컴파일 속도는 4-ke와 동일합니다. 컴파일하는 데 20초가 걸리는 일부 프로젝트가 있으며 일부는 끝없는 최적화 주기에 포함됩니다. :)

정확히! 동시에 나는 한 번 값을 1 로 설정하고 단순히 잊어 버렸습니다. ))

알렉세이 나보이코프 :
... 그리고 우리는 여기서 고통 받고 있습니다 ... 가장 이상한 것은 개발자가이 옵션에 대해 침묵했다는 것입니다

주제는 x64 플랫폼용 새로운 MQL5 컴파일러 테스트 - 계산 속도를 2배에서 10배까지 향상시키는 것이었습니다. >>>

이것은 내가 방금 잊었다. )

처음에는 이 최적화가 효과가 없었습니다. 즉, 경우에 따라 컴파일이 오류로 종료되었습니다 . 그러나 나는 그럭저럭 그 이유를 찾을 수 있었다 . 그런 다음 수정되었고 터미널 중 하나에서 매개 변수를 1 로 설정하고 잊어 버렸습니다. 그리고 어제 저는 앉아서 한 MT5 편집기에서 컴파일이 다른 MT5 편집기에서보다 훨씬 빠른 이유를 생각했습니다.

//---

이제 0 으로 설정하면 컴파일 속도가 ~25배 빨라집니다.

 0 error(s), 0 warning(s), compile time: 668 msec                 1        1
 
Anatoli Kazharski :

물론 MetaTrader 5 에서 가장 복잡한 내 프로젝트도 컴파일하는 데 오랜 시간이 걸립니다. 심지어 11 초까지 갑니다. 정확히 같은 버전이지만 MetaTrader 4 에서는 최대 25 배 더 빠릅니다.

MT5에서는 컴파일러가 더 발전되어 MT5에서보다 최대 10배 빠르게 작동하도록 코드를 최적화합니다. 우리는 이전에 이것을 작성하고 설명했습니다.

MQL5 컴파일러는 호환성을 위해 이전 32비트 버전(전체 최적화 없음)과 64비트용으로 가장 최적화된 버전의 두 가지 코드 사본을 생성해야 합니다. MQL5의 모든 기능은 64비트에서만 드러납니다.

 
Renat Fatkhullin :

MT5에서는 컴파일러가 더 발전되어 MT5에서보다 최대 10배 빠르게 작동하도록 코드를 최적화합니다.

또한 컴파일러는 호환성을 위해 이전 32비트 버전(전체 최적화 없음)과 64비트용으로 가장 최적화된 버전의 두 가지 코드 복사본을 만들어야 합니다. MQL5의 모든 기능은 64비트에서만 드러납니다.

고맙습니다. 나는 이미 이 모든 것이 논의된 지점에서 내 기억을 새로 고쳤습니다.

개발 중에는 값을 0 으로 설정하겠습니다. 컴파일해야 하고 10 초 동안 기다려야 하는 일이 매우 자주 발생하기 때문에 지루합니다. 그리고 최종 컴파일 전의 완성품에는 1 을 넣겠습니다.

 
Renat Fatkhullin :

MT5에서는 컴파일러가 더 발전되어 MT5에서보다 최대 10배 빠르게 작동하도록 코드를 최적화합니다. 우리는 이전에 이것을 작성하고 설명했습니다.

MQL5 컴파일러는 호환성을 위해 이전 32비트 버전(전체 최적화 없음)과 64비트용으로 가장 최적화된 버전의 두 가지 코드 사본을 생성해야 합니다. MQL5의 모든 기능은 64비트에서만 드러납니다.

MetaEditor가 실행되는 동안 OPTIMIZE 매개변수를 변경하면 설정을 승인하기 위해 다시 로드해야 합니까?
 
coderex :
MetaEditor가 실행되는 동안 OPTIMIZE 매개변수를 변경하면 설정을 승인하기 위해 다시 로드해야 합니까?
직접 해보는게 빠릅니다. 여기에서 방금 테스트했습니다. 편집기를 다시 시작할 필요는 없습니다.