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

 
Artyom Trishkin :

안녕하세요 fxsaber에서:

그리고 당신은 그림을 볼 수 있습니다 - 그것은 (코드) 무엇을합니까?

 

예약 작업에서 ArrayResize가 매우 느린 이유를 설명해 주십시오.

스크립트

 // Добавление элемента в конец произвольного массива
template < typename T>
void AddElement( T &Array[], const T &Value, const int Reserve = 0 )
{
   const int Size = :: ArraySize (Array);

  :: ArrayResize (Array, Size + 1 , Reserve);

  Array[Size] = Value;
}


#define BENCH(A)                                                              \
{                                                                             \
   const ulong StartTime = GetMicrosecondCount ();                              \
  A;                                                                          \
   Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - StartTime)); \
}

int Bench( const int Size, const int Reserve )
{
   const MqlTick NullTick = { 0 };
   MqlTick Ticks[];  
  
   for ( int i = 0 ; i < Size; i++)
    AddElement(Ticks, NullTick, Reserve);
    
   return ( ArraySize (Ticks));
}

void OnStart ()
{
  BENCH(Bench( 1 e7, 1 e5)); // 100 раз выделяется память
  BENCH(Bench( 1 e7, 1 e6)); //  10 раз выделяется память
  BENCH(Bench( 1 e7, 1 e7)); //   1 раз выделяется память
}


결과

 Time [Bench( 1 e7, 1 e5)] = 38199494
Time [Bench( 1 e7, 1 e6)] = 3867983
Time [Bench( 1 e7, 1 e7)] = 479303


100배 메모리 할당(5Mb에서 500Mb로)은 38초가 걸립니다. 이건 괜찮아?

실제 사용은 가져오기 전에 틱 기록을 준비해야 할 때 사용자 지정 기호에 있습니다. 로컬 저장소에 틱 데이터가 있는 CSV 파일이 있다고 가정해 보겠습니다. 이 파일에서 MqlTick 배열을 만들어야 합니다. 가장 좋은 방법은 무엇입니까? 이러한 파일의 틱 수를 미리 계산하는 것은 불가능합니다.

 
Rashid Umarov :

그리고 당신은 그림을 볼 수 있습니다 - 그것은 (코드) 무엇을합니까?

 
fxsaber :

이러한 파일의 틱 수를 미리 계산하는 것은 불가능합니다.

파일 크기 를 대략적인 1틱 크기로 나누시겠습니까?

 
Andrey Khatimlianskii :

파일 크기를 대략적인 1틱 크기로 나누시겠습니까?

불행히도 파일 크기 를 모릅니다. ZIP에서 CSV의 압축을 풉니다.

 
Rashid Umarov :

그리고 당신은 그림을 볼 수 있습니다 - 그것은 (코드) 무엇을합니까?

선택한 기간 동안 화면을 만드는 것이 어려운 작업으로 판명되었습니다. 두 날짜 범위에 대한 막대를 캡처하기 위해 너비를 결정하는 올바른 솔루션이 있습니까?

 
Aleksey Vyazmikin :

선택한 기간 동안 화면을 만드는 것이 어려운 작업으로 판명되었습니다. 두 날짜 범위에 대한 막대를 캡처하기 위해 너비를 결정하는 올바른 솔루션이 있습니까?

어떤 어려움이 있습니까??? 여기서는 하나의 스크립트로 서로 다른 축척으로 2개의 화면을 만들어 화면에 지정된 날짜로부터 30개의 막대가 있도록 했습니다.


 
fxsaber :

불행히도 파일 크기를 모릅니다. ZIP에서 CSV의 압축을 풉니다.

ZIP에서 어디로 이동합니까? 어레이로? 줄서서? 크기/길이도 있습니다.

 
Alexey Viktorov :

어떤 어려움이 있습니까??? 여기서는 하나의 스크립트로 서로 다른 축척으로 2개의 화면을 만들어 화면에 지정된 날짜로부터 30개의 막대가 있도록 했습니다.


확대/축소를 0으로 설정하십시오. 두 번째 화면에서 첫 번째 화면과 달리 막대가 이미 연속적으로 연결된 것을 볼 수 있습니다.

그리고 30개의 막대는 무엇이며 600개를 봅시다!
 
Andrey Khatimlianskii :

ZIP에서 어디로 이동합니까? 어레이로? 줄서서? 크기/길이도 있습니다.

그런 다음 모든 압축을 풀고 수백 메가바이트의 압축을 푼 메모리를 메모리에 저장해야 합니다.

또는 줄 수를 더하여 압축을 풉니다(줄 - 눈금). 메모리에 저장합니다. 그런 다음 파싱을 통해 다시 압축을 풉니다.