MT5와 속도 - 페이지 88

 
fxsaber :

하나면 충분합니다.

 int CTickSeriesCollection::IndexTickSeries( const string symbol)
  {
   const CTickSeries *obj= new CTickSeries(symbol== NULL || symbol== "" ? :: Symbol () : symbol);
   ...
   ...
   ...
  }

또한 ""를 확인합니다. 나 자신은 현재 문자에 대한 메서드를 호출할 때 항상 NULL을 사용합니다.

 
Artyom Trishkin :

귀하의 코드는 속도 향상을 제공하지 않습니다.

 
fxsaber :
뻔한 걸 설명하기가 어렵네요. 이 코드에서는 GetMarketWatchTick의 속도를 높일 수 있습니다.
 const MqlTick GetMarketWatchTick( const string &Symb )
{
   MqlTick Tick = { 0 };

   SymbolInfoTick (Symb, Tick);

   return (Tick);
}

void OnTick ()
{
   MqlTick Ticks[ 1 ];
  
  Ticks[ 0 ] = GetMarketWatchTick( _Symbol );
   ArrayPrint (Ticks);
}

_Symbol이 Symbol 매개변수로 전달되더라도 SymbolInfoTick() 함수 에 문자열이 전달될 것이라고 생각하십니까?

현재 문자에 대한 문자열의 동일성에 대한 표준 함수 내부에 검사가 없다고 생각하지 않으며 이러한 명시적 매개변수를 사용하여 현재 문자에 대한 캐시가 있는 경우 "전체" 검사가 시작됩니다.

 

속도 향상은 런타임이 아닌 컴파일 시간에 발생합니다.

컴파일러는 다음과 같이 대체합니다.

 SymbolInfoTick ( _Symbol , Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick ( NULL , Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick (:: Symbol (), Tick) -> SymbolInfoTickInside(Tick);

다른 모든 경우에는 대체가 이루어지지 않습니다.

 
fxsaber :

속도 향상은 런타임이 아닌 컴파일 시간에 발생합니다.

컴파일러는 다음과 같이 대체합니다.

다른 모든 경우에는 대체가 이루어지지 않습니다.

잘. 내가 말한 것 - 코드는 현재 문자가 아닌 일반 기능의 속도를 높이지 않습니다. 또한 현재 속도를 가속하지 마십시오.

그리고 내 속도가 빨라지지 않습니다. 그리고 결코 서두르지 않았습니다. 나는 이것에 대한 환상이 없었습니다. 그러나 NULL 또는 ""가 내 함수에 전달되면 일반 함수를 참조할 때 항상 Symbol() 또는 NULL을 대체합니다. 이것은 현재 문자에 대한 캐시에서 데이터를 가져오는 일반 함수의 빠른 코드를 호출합니다.
내 함수를 호출할 때 Symbol() 또는 _Symbol을 사용하는 경우 일반 함수 내에서 현재 기호와 일치하는지 확인하지 않습니까? 정말 전체 프로그램에서 현재 기호를 검사하는 코드가 실행됩니까? 어쩐지 믿겨지지가 않아...

 
Artyom Trishkin :

잘. 내가 말한 것 - 코드는 현재 문자가 아닌 일반 기능의 속도를 높이지 않습니다. 또한 현재 속도를 가속하지 마십시오.

아마도 누군가 당신에게 더 명확하게 설명할 수 있습니다. 나는 얻을 수 없었다.

 
fxsaber :

아마도 누군가 당신에게 더 명확하게 설명할 수 있습니다. 나는 얻을 수 없었다.

일반 기능의 속도를 높이기 위해 마술을 사용하는 것은 무엇입니까?

캐시에서 현재 문자에 대한 데이터를 사용하도록 일반 함수에 전달할 때 현재 문자 값 대체를 사용합니다. 이것은 스톡 기능의 속도를 높이는 것이 아니라 현재 기호에 대한 속도를 사용합니다.

소스에 액세스할 수 없는 항목의 속도를 높일 수 없습니다. 함수를 올바르게 호출하기 위해 표준 트릭을 사용하고 있습니다. 그러나 EURUSD에서 작업할 때 Symbol이 문자열에 "EURUSD"로 지정되어 있는지 확실하지 않습니다. 즉, 이것이 현재 기호를 사용하는 경우 표준 기능은 "EURUSD" 문자열의 동등성을 확인하지 않습니다. Symbol() 값으로 변경하고 캐시의 데이터를 사용하지 않고 전체 기호 검사를 시작합니다.

그렇다면 정규 함수의 가속은 어디에 있습니까? 그렇다면 흥미롭고 유용합니다.

 
fxsaber :

MT4에서도 마찬가지인가요? 그리고 MT5 Tester에서는 어떻습니까?

CopyTicks도 마찬가지인가요?

 
fxsaber :

아마도 누군가 당신에게 더 명확하게 설명할 수 있습니다. 나는 얻을 수 없었다.

내 질문을 이해하지 못했을 가능성이 큽니다. 나는 그것을 여러 번 반복했습니다 (이 질문은 "일반 기능의 가속"에 관한 것이 아닙니다).

 
Slava :

Symbol(), _Symbol 또는 NULL 대신 일반 문자열 매개변수가 지정 되면 전체 프로그램 검사가 수행되고 다른 속성 쿼리가 수행됩니다.

어떤 이유로 이 설명에서는 문자열 매개변수가 현재 문자와 같으면 전체 검사가 수행되지 않는다고 말하지 않습니다.