MQL4 및 MQL5에서 Digits()를 무시하고 숫자(따옴표 제외)의 쉼표 뒤 소수 자릿수 가져오기 - 페이지 15

 
Igor Makanu :

Sish의 memmove() 원리에 따라 ArrayCopy()를 만들었다면,

그러면 ArrayCopy()의 속도는 메모리 할당 속도에 달려 있다고 생각하는데, 복사를 위한 중간 버퍼의 메모리가 준비되어 있으면 ArrayCopy()가 매우 빨리 실행되고 메모리가 할당되지 않으면 요청 OS가 메모리를 할당 하기 시작합니다.

당신은 그것을 테스트하려고 할 수 있습니다 - 많은 양의 데이터로 ArrayCopy()를 한 번 호출하여 교환을 위한 버퍼 메모리를 준비한 다음 복사하고 속도를 측정하기 위해 더 적은 양의 데이터로 ArrayCopy()로 루프를 만듭니다.

현재 예제에서 복사는 정적 배열로 수행되며 ArrayCopy가 단순 배열보다 느릴 때 일반적으로 흥미롭습니다. 메모리를 할당해야 하는 경우에도 여전히 할당해야 합니다.

 
Ilya Malev :

현재 예제에서 복사는 정적 배열로 수행되며 ArrayCopy가 단순 배열보다 느릴 때 일반적으로 흥미롭습니다. 메모리를 할당해야 하는 경우에도 여전히 할당해야 합니다.

근본적으로 정적이거나 동적이지 않고 우리는 ArrayCopy()가 어떻게 구현되는지 모릅니다. 저는 그것이 표준 Sish 함수에 대한 "래퍼"라고 가정했습니다. memmove()는 일반적으로 추가 버퍼를 통해 작동합니다... 음, 평소와 같이 이전에 작성했지만 어떤 컴파일러가 어떻게 작동하는지 말하기가 어렵습니다.

추신: 저는 MQL에서 실행 속도를 테스트하는 방법을 모르겠습니다. 나는 이 질문에 점수를 매겼다 - 나는 성능을 테스트하지 않는다. 나는 보통 프로파일러 를 보고 그것이 제 시간에 어떻게 완료되는지 살펴본다.

 
Igor Makanu :

MQL에서 실행 속도를 테스트하는 방법을 모르겠습니다. 이 질문 - 나는 성능을 테스트하지 않습니다. 일반적으로 프로파일러 에서 제 시간에 무엇을 어떻게 수행했는지 확인합니다.

여기 내가 위에서 사용한 가장 쉬운 방법이 있습니다

 #property strict

#define   test(M,S,EX)        { uint mss= GetTickCount (); int nn=( int ) pow ( 10 ,M); for ( int tst= 0 ;tst<nn;tst++){EX;} \
                                 printf ( "%s: loops=%i ms=%u" ,S,nn, GetTickCount ()-mss);}

void OnStart ()
 {
   int arr1[ 100 ]={ 0 },arr2[ 100 ]={ 0 };
  test( 7 , "Копирование через ArrayCopy" , ArrayCopy (arr1,arr2))
  test( 7 , "Копирование через for" , for ( int i= 0 ;i< 100 ;i++)arr1[i]=arr2[i])
 }  


 
Ilya Malev :

여기 내가 위에서 사용한 가장 쉬운 방법이 있습니다


ATP, 내가 취했다, 나는 내일 그것을 시험할 것이다

 
Ilya Malev :

예, 이것은 훨씬 빠르게 작동합니다(가능한 경우 ArrayCopy로 대체되고 나머지는 동일함).

나는 테스트없이 마음에 가장 먼저 떠오르는 것을 썼다고 말합니다))

이 옵션은 것과 다르지 않습니다. 측정(최소 10회 시도)이 이를 확인합니다.

https: //www.mql5.com/ru/forum/287618/page14#comment_9807465
TicksToIntArray_fxsaber2
Time [TicksToIntArray(TicksIn,Array)] = 301036
IntArrayToTicks_fxsaber2
Time [IntArrayToTicks(Array,TicksOut)] = 315109
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9808274
TicksToIntArray_antfx1
Time [TicksToIntArray(TicksIn,Array)] = 216101
IntArrayToTicks_antfx1
Time [IntArrayToTicks(Array,TicksOut)] = 203610
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9810247
TicksToIntArray_antfx2
Time [TicksToIntArray(TicksIn,Array)] = 303656
IntArrayToTicks_antfx2
Time [IntArrayToTicks(Array,TicksOut)] = 312008
true

주기가 있는 변형이 더 빠르다는 것을 알 수 있습니다. 60/4의 주기 = 15개 요소.

파일:
 
fxsaber :

이 옵션은 것과 다르지 않습니다.

분명히 예, 구조 유형과 배열 유형만 임의적입니다.

 
fxsaber :

주기가 있는 변형이 더 빠르다는 것을 알 수 있습니다. 60/4의 주기 = 15개 요소.

동일한 MqlTicks 및 int를 사용하여 ArrayCopy보다 빠른 것으로 판명된 것이 이상합니다...

 
Ilya Malev :

동일한 MqlTicks 및 int를 사용하여 ArrayCopy보다 빠른 것으로 판명된 것이 이상합니다...

저는 MT5x64에서 실행 중입니다.

일리야 말레프 :

분명히 예, 구조 유형과 배열 유형만 임의적입니다.

더 많은 사람들이 참여할 수 있도록 의도적으로 일반적인 경우를 우회했습니다.


일단은 하자

https: //www.mql5.com/ru/forum/287618/page14#comment_9808274
TicksToIntArray_antfx1
Time [TicksToIntArray(TicksIn,Array)] = 213426
IntArrayToTicks_antfx1
Time [IntArrayToTicks(Array,TicksOut)] = 202693
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9807465
TicksToIntArray_fxsaber3
Time [TicksToIntArray(TicksIn,Array)] = 192362
IntArrayToTicks_fxsaber3
Time [IntArrayToTicks(Array,TicksOut)] = 159932
true
 
fxsaber :

저는 MT5x64에서 실행 중입니다.

더 많은 사람들이 참여할 수 있도록 의도적으로 일반적인 경우를 우회했습니다.


일단은 하자

당신의 속도가 더 빠른 것 같습니다 :)

기능을 동일한 ArrayCopy (source start, dest start, count)로 가져오고 매개변수의 정확성을 확인하기 위해 추가해야 할 서비스 코드가 여전히 많이 있습니다...

일반적으로 멋진 작품/라이브러리가 너무 많아서 포럼에서 최고의 솔루션을 묻고 토론하는 것이 이상합니다. :)

 
Ilya Malev :

포럼에서 최고의 솔루션을 묻고 토론하는 것이 이상합니다. :)

HistoryTicks 라이브러리가 필요합니다. 참여해 주셔서 감사합니다.