Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
s.s. Especificamente sobre a questão do armazenamento de cordas em objetos MT, há uma falha estranha. Se você começar a comprimir os dados e usar caracteres não impressos no nome do objeto, em alguns casos você não poderá acessar esse objeto. A falha provavelmente ainda está lá porque é muito específica e não há muita gente que saiba dela, mas mesmo assim você pode tropeçar nela.
Estou vendo. Somente a prática ajudará a descobrir isso definitivamente.
Caros oponentes.
Aqui está o código do roteiro que:
Resultado:
Peter, você está testando a coisa errada no lugar errado. O que você está testando deve ter aproximadamente a mesma velocidade em termos de lógica de cordas.
Você entendeu completamente mal minha mensagem.
Minha mensagem era que você deveria parar de usar cordas para passar o dobro, longo, tempo, int, etc. E se você precisar passar um texto, então traduza uma seqüência de texto para a matriz uchar. E todos os dados mistos de diferentes tipos via estruturas de dados sindicais ou arrays destas estruturas, convertidos em arrays uint via union, devem ser passados através de recursos, e no lado receptor, estes arrays uint devem ser convertidos de volta via union para as estruturas originais. Acredite em mim, Peter, as tangas são muito lentas, você deve sempre evitá-las onde possível. O String é necessário apenas para saída de texto e impressão.
E em seu exemplo, você tem a noção de medir o desempenho completamente errada.
Especialmente através da propriedade OBJPROP_TEXT você pode passar um fio com um tamanho máximo de 63 bytes. Isto não é nada.
Embora seu exemplo não faça sentido algum, mas eu o modifiquei para algo mais correto apenas para fins de demonstração e isto é o que eu tenho quando copio 1000 cordas diferentes com tamanho 63 bytes:
O código do roteiro está anexado. Funciona tanto no MT4 como no MT5
MT4:
MT5:
Parece que o MT5 é assíncrono, portanto seu método é 100 vezes mais lento e não é nada adequado para o MT5. Você deve se concentrar cada vez mais no MT5
E o que é isso?
Você deve ao menos ler a Ajuda
Caros oponentes.
Aqui está o código do roteiro que:
Resultado:
Leia com atenção e conclua: https://docs.mql4.com/ru/basis/types/stringconst
não concordam. Precisamos de uma matriz de uchar para cordas como um intermediário. E não há conversão, apenas cópia de bytes.
Eu não concordo. Precisamos de uma matriz de uchar para o cordão como intermediário. E não há conversão, apenas cópia de bytes.
Tente usar caracteres cirílicos. E comparar códigos de caracteres em uchar array e em string, string é como ushort array.
Eu sei o que é unicode. Mas, em nosso caso, precisamos apenas de uma matriz de uchar para que a matriz de uchar passe mais adiante através do recurso e ao retomar a cadeia de recuperação de cordas. Não haverá perdas. E, neste caso, não precisamos extrair caracteres da matriz uchar.
A codificação pode ser alterada e, por padrão, não é umunicode.
Peter, você está testando a coisa errada no lugar errado. O que você está testando deve ter aproximadamente a mesma velocidade em termos de lógica de cordas.
Nikolai, com todo respeito, isso são palavras vazias para nada. Eu medi e anexei um roteiro. "O caminho certo, o caminho errado...", "deve ter aproximadamente a mesma velocidade em termos de lógica de cordas"... Apenas palavras.
Nikolai Semko:
...
Você entendeu completamente mal minha mensagem.
Minha mensagem era que você deveria parar de usar cordas para passar o dobro, longo tempo, int, etc. E se você precisar passar um texto, então converta uma seqüência de texto para uchar array. E todos os dados mistos de diferentes tipos via estruturas de dados sindicais ou arrays destas estruturas, convertidos em arrays uint via union, devem ser passados através de recursos, e no lado receptor, estes arrays uint devem ser convertidos de volta via union para as estruturas originais. Acredite em mim, Peter, as tangas são muito lentas, você deve sempre evitá-las onde possível. O String é necessário apenas para saída de texto e impressão.
Essa é exatamente a sua mensagem que eu entendi perfeitamente. E É ERRADO.
Por quê? - Porque você teria que complicar o sistema de trabalhar com parâmetros de controle um LOT. A arquitetura de armazenar, passar e gerenciar parâmetros se tornará TUCH mais complicada e confusa, o que levará a uma série de problemas e a uma desaceleração geral.
Você não entende a arquitetura interna. Você não sabe como os programas interagem, administra os valores dos parâmetros de acordo com seu tipo e propriedades. O que você propõe tornaria as coisas muito mais complicadas e confusas. E não vai resolver o problema de comunicação. Continuará a ser mutilado.
...
Ainda mais você pode passar um fio com um tamanho máximo de 63 bytes através da propriedade OBJPROP_TEXT. Isso não é nada.
Embora seu exemplo não faça sentido algum, eu o retrabalhei para algo mais correto apenas para fins de demonstração, e aqui está o que consegui ao copiar 1000 cordas diferentes com o tamanho 63 bytes:
...
Você pode passar uma seqüência de 64 caracteres através da descrição de um objeto MT. Isso é suficiente. Eu preciso - 20-30 linhas para transferir dados de tabelas grandes. Sem mesas grandes, eu preciso de 2-3 linhas no máximo.
No momento, estou interessado no MT4.
O MT5 está se desenvolvendo o tempo todo. Os desenvolvedores podem simplesmente adicionar memória comum dos programas de MT (para que não tenham que se preocupar com recursos) e a questão será removida.
Nikolai Semko:
...
Minha mensagem era que deveríamos parar de usar cordas para passar o dobro, longo, tempo, int, etc.
...
Como transferir o dobro, longo, tempo, int etc... ???
Mesmo assim, precisamos convertê-lo em cordel e depois em carvão para escrevê-lo no recurso.
Ou você sugere o uso de lparam,dparam ?
Ou seja, sobrecarregar a fila de eventos...
Além disso, em suas medidas, você esqueceu de adicionar o tempo para economizar e ler o recurso...
Assim, mesmo que você escreva 1000 linhas (que é realmente melhor passar pelo recurso), você não ganha em velocidade, por causa do custo de economizar e recuperar do recurso.