a única pergunta é: будет ли работать заметно быстрее, если обработку массивов вынести в DLL? alguém tem algum compilador instalado? por favor, verifique! não é tão chato assim?
Os acessos às matrizes são dez vezes mais lentos que as variáveis locais.
O tempo de endereçamento de um item de matriz SEMPRE não é maior do que o tempo de endereçamento de uma variável. Os números específicos serão diferentes para diferentes compiladores, mas a tendência deve permanecer a mesma.
O compilador é o Visual Studio 2005. O processador é Athlon XP 2500+. O tempo de execução junto com a inicialização da matriz é de 1.06-1.07 seg.
Dim t1, t2 As Double t1 = DateAndTime.Timer() Dim x, y, z As Double Dim d, k As Double Dim Open(5001), Close(5001) As Double Dim For d = 5000 To 1 Step -1 For k = 1 To 4999 z = Close(k) : y = Close(k + 1) : x = Close(k + 2) z = Open(k + 1) : y = Open(k + 1) : x = Open(k + 2) Next t2 = DateAndTime.Timer() MsgBox(CStr(t2 - t1) + " segundos")
O mesmo laço, mas com
z = Fechado(1) : y = Fechado(1) : x = Fechado(1) z = Aberto(1) : y = Aberto(1) : x = Aberto(1)
dá de 0,37 a 0,4 segundos.
E finalmente,
z = k : y = k : x = k z = k : y = k : x = k
0,56-0,6 с.
Portanto, gostaria de tirar a seguinte conclusão: não é sobre um compilador e não sobre "array/não-array", mas sobre a estruturação correta dos dados e o código correto! P.S. Naturalmente, todas as teses acima, exceto as medidas de tempo, são minha opinião pessoal, profundamente subjetiva e modesta, assim como um programador.
sim, a otimização do código resultante em compilador é um poder afinal de contas... Não quero entrar em detalhes, mas parece que o copiador de estúdio visual otimiza os acessos à matriz por si só. para fazer o teste justo, você precisa inserir uma variável, digamos, S; e inserir entre todas as atribuições x,y,z algo como S=S+x, S=S+y, S=S+z, e depois sair S além do tempo para obter velocidade "pura".
embora o otimizador do compilador possa descobrir parcialmente esta trapaça... :)
para garantir a integridade do teste, precisamos introduzir uma variável
Há muito tempo, eu já rejeitei tais pensamentos. Eu até já fiz testes. E cheguei a uma conclusão:
O compilador realiza todas as operações prescritas e simplesmente não tem o direito de não realizá-las porque é simplesmente impossível saber 100% de onde pretendo acessar estas variáveis - no mesmo método, a partir de algum timer (e código estruturalmente não relacionado) ou mesmo a partir de algum outro processo. Portanto, tudo é justo. Verificado.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
alguém tem algum compilador instalado? por favor, verifique! não é tão chato assim?
O tempo de endereçamento de um item de matriz SEMPRE não é maior do que o tempo de endereçamento de uma variável.
Os números específicos serão diferentes para diferentes compiladores, mas a tendência deve permanecer a mesma.
O compilador é o Visual Studio 2005. O processador é Athlon XP 2500+.
O tempo de execução junto com a inicialização da matriz é de 1.06-1.07 seg.
O mesmo laço, mas com
dá de 0,37 a 0,4 segundos.
E finalmente,
0,56-0,6 с.
Portanto, gostaria de tirar a seguinte conclusão:
não é sobre um compilador e não sobre "array/não-array", mas sobre a estruturação correta dos dados e o código correto!
P.S. Naturalmente, todas as teses acima, exceto as medidas de tempo, são minha opinião pessoal, profundamente subjetiva e modesta, assim como um programador.
sim, a otimização do código resultante em compilador é um poder afinal de contas...
Não quero entrar em detalhes, mas parece que o copiador de estúdio visual otimiza os acessos à matriz por si só.
para fazer o teste justo, você precisa inserir uma variável, digamos, S; e inserir entre todas as atribuições x,y,z algo como S=S+x, S=S+y, S=S+z, e depois sair S além do tempo para obter velocidade "pura".
embora o otimizador do compilador possa descobrir parcialmente esta trapaça... :)
Há muito tempo, eu já rejeitei tais pensamentos. Eu até já fiz testes. E cheguei a uma conclusão:
O compilador realiza todas as operações prescritas e simplesmente não tem o direito de não realizá-las porque é simplesmente impossível saber 100% de onde pretendo acessar estas variáveis - no mesmo método, a partir de algum timer (e código estruturalmente não relacionado) ou mesmo a partir de algum outro processo.
Portanto, tudo é justo. Verificado.
P.S. Offtopics, desculpe. Não resistiu.
qual é o array especificado pelo parâmetro no ArrayCopySeries?
é um array regular de valores, ou um array de indicadores de valores?
(esta é obviamente uma pergunta tola, mas eu não programo há 10 anos, muito menos em C, muito menos em Windows)
e onde ler sobre tudo isso?
Eu realmente preciso...
Há alguma forma de... Eu não sei. É permitida a invocação recursiva do início()?
não há como. o EA não iniciará se o botão for desativado.
é permitido.
Obrigado por sua resposta.
Bem, uh... Então e agora...?
Eu não sei... ou ir por 5, mas ontem... e hoje por 3... os pequenos.
Terei que me contentar com muitos pequenos. Eu não queria. Bem, e agora... :(
Parece tão fácil...
(não se importe comigo, é meditação já salpicando sobre o teclado)
É impressão minha ou é suposto ser?
Eles são e sempre foram destacados normalmente. Acabei de verificar a construção do 183 e do 187.