Obter o número de casas decimais de quaisquer números (não apenas citações) contornando Dígitos() em MQL4 e MQL5 - página 20

 
Алексей Тарабанов:

O resultado de quê?

Velocidades
 
fxsaber:

A multiplicidade é a condição do problema.

Simples, um quebra-cabeça?

 
Алексей Тарабанов:

Simplesmente, um quebra-cabeça?

Aplicações práticas

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Nova versão do MetaTrader 5 build 1930: janelas de gráficos flutuantes e bibliotecas .Net em MQL5

fxsaber, 2018.12.09 00:18

Este exemplo agora funciona 15x mais rápido

1000000
Time[TestResource()] = 286646


Grosso modo, o ciclo completo de escrita/leitura de carrapatos através do recurso está correndo a 4 milhões de carrapatos por segundo.


Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Discussão do artigo "WebRequest assíncrono multithreaded em MQL5 com suas próprias mãos".

fxsaber, 2018.12.09 00:52

Tente o Resource_Data.mqh atualizado, os desfasamentos de transferência da página da web devem desaparecer.

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

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

const RESOURCEDATA<uchar> Resource("::" + __FILE__); // Ресурс для передачи данных (байты)
uchar BytesIn[];
const int Init = ArrayResize(BytesIn, 1000000);

void TestResource()
{
  uchar BytesOut[];

  Resource = BytesIn;
  Print(Resource.Get(BytesOut));
}

void OnStart()
{
  BENCH(TestResource());
}


Versão antiga

1000000
Time[TestResource()] = 103746


Nova versão

1000000
Time[TestResource()] = 5222
 
Ilya Malev:

Há uma comparação da velocidade de classificação com o ArraySort incorporado regularmente em amostras aleatórias? Pelo menos um método que classifica os dados aleatórios mais rapidamente, em média...

Ou não mais rápido, mas pelo menos o mesmo. Ou não tão rápido, mas pelo menos não mais do que o dobro do tempo. Sem nenhuma Dll e outras coisas como multithreading

Existe um código fonte, você mesmo pode medi-lo.

 
Preguiçosos.
 
Nikolai Semko:
Não se consegue passar.
Terei a certeza de participar quando chegar ao computador.
Após uma rápida olhada, já tenho idéias de como melhorar os resultados em 10-20%.

Já preso ao máximo desempenho, receio eu.

 
fxsaber:

Receio que já estejamos presos ao máximo desempenho.

Talvez haja algo que eu não tenha notado. Mas se você usar apenas um tipo de sindicato, ainda há potencial.
 
Nikolai Semko:
Talvez haja algo que eu não tenha notado. Mas se você usar apenas um tipo de sindicato, ainda há potencial.

Feliz por estar errado.

 
Алексей Тарабанов:
Preguiçosos.
Você fede a bebida. Pare de beber, camarada tenente-coronel.
 
fxsaber:

Feliz por estar errado.

Está a caminho agora. Você mesmo pode tentar. A idéia é utilizar uniões com matrizes de estruturas de diferentes tamanhos, por exemplo 10, 100, 1000, 10000...
Isto encurtará o ciclo por ordens de magnitude e reduzirá o número de chamadas do ArrayCopy por ordens de magnitude.
Isto deve ser próximo à variante de memópias
Razão: