Erros, bugs, perguntas - página 977

 
Renat:
Não são chamados métodos GDI.

Refiro-me ao TextOut. Não é sistema?

Compreendo o rótulo, não o associo de forma alguma ao GDI

 
voix_kas:

O texto muda em todas (metade) das etiquetas concebidas para exibir o valor do indicador e não a sua descrição. Pode ver isto ao executar o guião.

Ou não o compreendo. De que linha exactamente estamos a falar?

Desculpe, estava a olhar para o sítio errado do meu telemóvel e cometi um erro.

Farei os meus próprios testes nas próximas horas e afixarei o código fonte e resultados detalhados.

 
sergeev:

Refiro-me ao TextOut. Não é sistema?

Compreendo o rótulo, não o associo de forma alguma ao GDI

Pensei que com o GDI se tratava de etiquetas.

A modificação dos parâmetros do rótulo não é mais do que o esmagamento maciço do fluxo de comandos numa fila dedicada sem qualquer adição real desses dados a objectos reais (os objectos pertencem ao gráfico, não à MQL5), até que os dados do objecto sejam entregues ou lidos de volta. Ou seja, a modificação real dos objectos é adiada. Aplicámos propositadamente tal optimização para permitir aos programadores operar com dezenas de milhares de objectos sem lentidão.

Ou seja, quando se modifica objectos a execução real é atrasada, o que dá uma sensação de velocidade. Bem e toda a carga de desenho é transportada no fio (gráfico) da interface da aplicação. E ao renderizar, os métodos de optimização e de corte de visibilidade limitam o trabalho, o que permite trabalhar normalmente com 300 000-500 000 objectos por gráfico.

Mas quando se trabalha com bitmaps, todo o trabalho é feito em MQL5 de uma só vez, sem qualquer atraso, mas depois disso é feito instantaneamente na renderização. E o tempo total de "modificação + renderização" de um bitmap é susceptível de ser mais rápido para um determinado número de objectos. Especialmente considerando o facto de que o bitmap é salvo entre chamadas e só se pode terminar de desenhar apenas o que se precisa, em vez de reconstruir a tela inteira.

Farei testes detalhados e publicarei os resultados mostrando como os objectos e bitmaps se comportam em diferentes modos.

 

Colocou os resultados numa linha separada: Teste de desempenho de etiquetas e bitmaps de texto único num gráfico

O autor tinha um erro grave no seu guião de manipulação do bitmap - na realidade, utilizou dois bitmaps em vez de um e copiou-os constantemente um no outro, o que reduziu o desempenho.

 
Renat:

Colocou os resultados do teste num fio separado: Teste de desempenho de etiquetas de texto único e bitmaps num gráfico

O autor tinha uma falha grave no seu guião quando trabalhava com bitmaps - na realidade utilizava dois bitmaps em vez de um e copiava-os constantemente um no outro, o que reduzia o desempenho.

Então a forma de acelerar a produção real é uma falha? :)

Já descrevi aqui anteriormente a finalidade para a qual a tela modelo e a tela de trabalho foram introduzidas.

 

Vamos viver muito tempo.

O manual da MQL5 diz o tipo de data/hora https://www.mql5.com/ru/docs/basis/types/integer/datetime:

"Gama de valores de 1 de Janeiro de 1970 a 31 de Dezembro de 3000. "

na realidade o valor máximo a 32535244799 é 3001.01.01 07:59:59

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
O teste é baseado no desempenho, pelo que não deve ser entupido com operações adicionais.
 

Para melhorar a pureza da programação, gostaria de perguntar ao público sobre isto.

Suponha-se que existe uma bandeira (bool Flag) declarada globalmente. Quando certos eventos/condições ocorrem, deve ser definido para um determinado valor.

A primeira variante:

if (некое условие) {
  Flag = false;
}

Segunda opção:

if (некое условие) {
  if (Flag) Flag = false;
}

Qual a opção:

1. mais rápido em termos de desempenho?

2. Se me é permitido dizê-lo, "mais profissional"?

Assume-se que esta secção do código terá controlo com bastante frequência, por exemplo, em cada carrapato.

 
voix_kas:

Para melhorar a pureza da programação, gostaria de perguntar ao público sobre isto.

Suponha-se que existe uma bandeira (bool Flag) declarada globalmente. Quando ocorrem alguns eventos/condições, o seu valor deve ser definido.

Naturalmente, a primeira variante é mais rápida. Menos instruções e menos uma comparação/branqueamento.
 
Renat:
Naturalmente, a primeira opção é mais rápida. Menos instruções, e também menos uma comparação/branqueamento.
Obrigado.