Minha abordagem. O núcleo é o motor. - página 84

 
Maxim Kuznetsov:

E sim, analisar os textos em MQL é muito divertido :-) Bem, ele não foi projetado para análise de texto. Você pode, mas é uma chatice...

Matrizes e pedidos - é disso que se trata a MQL

É disso que eu estou falando... :)

 
Nikolai Semko:

A versatilidade é muitas vezes sinônimo de lentidão, e mais ainda, de cordel.
Deixe-me dar-lhe um exemplo.

Uma vez analisei um cordel recebido de um crypto-exchange usando WebRequest. E eu a analisei usandoa biblioteca JSON de Sergeev, que ele portou da "biblioteca C++ de alta velocidade". E notei que a velocidade é muito insatisfatória. Lá tudo era feito através de cordas "universais".

Eu entendi que a razão para a baixa velocidade era o uso de cordas e queria evitar o uso de funções de cordas e escrevi uma função analisando diretamente da matriz de uchar. O resultado me surpreendeu um pouco. Minha velocidade de análise foi.... (rolo de tambor) 800 vezes mais rápido. Se a análise de um fio inteiro através do JSON demorou 0,3 segundos, minha função a analisei em menos de meio milissegundo.

Aqui está um exemplo da minha análise via uchar array.

A essência de sua sugestão é a seguinte:

  1. Pegamos uma string (640 caracteres), enviamos para a função StringToChar();
  2. Nós obtemos a matriz e a armazenamos no recurso.
  3. Obtenha o conteúdo do recurso no segundo lado usando ResourceReadImage() para a segunda matriz.
  4. Envie a segunda matriz para CharArrayToString() e obtenha a cadeia final.
  5. Em seguida, dividir a cadeia por um delimitador e escrever os valores dos parâmetros no kernel.

Originalmente eu queria usar objetos MT para transferir cordas.

  1. Pegamos um fio (640 caracteres), e o dividimos em partes de 64 caracteres cada.
  2. Fazemos um loop nos objetos de comunicação e escrevemos as partes do fio em sua descrição.
  3. No segundo lado, faça um laço nos objetos de comunicação, obtenha partes da cadeia e cada parte é dividida por um delimitador, extraindo o número e o valor do parâmetro.
  4. Escrevemos valores de parâmetros para o núcleo.

A segunda variante me pareceu mais rápida inicialmente.

Quando você tem tantas tarefas como eu, você tem que confiar em sua intuição ao escolher uma solução. Você não terá vida suficiente para verificar tudo minuciosamente. Você precisa ou de uma equipe ou de um grande senso de intuição para escolher a direção certa. E, é claro, é preciso sacrificar o profissionalismo e tolerar as lacunas de conhecimento. Caso contrário, você será deixado a fazer rabiscos (embora profissionalmente) e nunca terminará um mega-projeto. Esta é a realidade.

 
Реter Konow:

A essência de sua sugestão é a seguinte:

  1. Pegamos um fio (640 caracteres), enviamo-lo para StringToChar();
  2. Conseguimos uma matriz e a armazenamos em um recurso.
  3. Obtenha o conteúdo do recurso no segundo lado usando ResourceReadImage() para a segunda matriz.
  4. Envie a segunda matriz para CharArrayToString() e obtenha a cadeia final.
  5. Em seguida, dividir a cadeia por separador e escrever os valores dos parâmetros no kernel.

Não é nada disso.
Estou ocupado no momento - não tenho tempo para explicar.

Se você desmontar meu código em detalhes, para que não fiquem pontos em branco, você fará muitas descobertas para si mesmo.
ZS. Somente sem um depurador será muito mais difícil de descobrir. Não sei se você começou a usá-la ou se ainda não usa esta importante ferramenta.

 
Nikolai Semko:

...

Se você examinar meu código em detalhes, e não deixar pontos em branco, você fará muitas novas descobertas.
ZS. Somente sem o uso de depurador será muito mais difícil de entender. Não sei se você começou a usá-la ou se ainda não usa esta importante ferramenta.

Amanhã, vou dar uma olhada mais de perto em seu código. (Não se esqueça dos fusos horários).

Talvez, de fato, eu descubra algo novo. ))

 

Qualquer estrutura é um fio. Um conjunto de estruturas é um conjunto de cordas com uma descrição de seu formato. Classe - estrutura e métodos, implementação de classe - conjunto de implementações (perdão meu francês).

Você não precisa converter nada até o último momento. Há apenas cordas envolvidas em todos os lugares. Simplesmente, elas são normalizadas: algumas levam 2, ou 4 bytes, e outras levam 1, então você tem que alinhar.

Utilizei pela primeira vez esta abordagem por volta de 1993, o SGBD Clarion. Funcionou muito rapidamente.

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

Qualquer estrutura é um fio. Um conjunto de estruturas é um conjunto de cordas com uma descrição de seu formato. Classe - estrutura e métodos, implementação de classe - conjunto de implementações (perdão meu francês).

Você não precisa converter nada até o último momento. Há apenas cordas envolvidas em todos os lugares. Simplesmente, elas são normalizadas: algumas levam 2, ou 4 bytes, e outras levam 1, então você tem que alinhar.

Utilizei pela primeira vez esta abordagem por volta de 1993, o SGBD Clarion. Tudo isso funcionou muito rapidamente.

Mais ou menos ao mesmo tempo com o mesmo :-) Uma escola... a propósito, o SGBD não era ruim e estava à frente de seu tempo em muitos aspectos.

PS/ às vezes, há uma cócegas muito querida, a posteriori no nível do conceito "tudo é um fio/texto". A velocidade está realmente no nível da pitão.

 
Реter Konow:

Amanhã, vou dar uma olhada de perto em seu código. (Não se esqueça dos fusos horários).

Talvez eu realmente descubra algo novo. ))

Talvez seja útil

O exemplo de indicador que utiliza variável de recurso em duplo exemplo, que não reinicializa seu valor ao mudar o TF. Esta é uma alternativa mais conveniente às variáveis globais do terminal. Da mesma forma, diferentes estruturas de dados e matrizes destas estruturas podem ser usadas como estruturas globais.

Arquivos anexados:
 
Nikolai Semko:

ainda pode vir a ser útil.

)

 
Реter Konow:
Por interesse, vou tentar a variante com sindicato. E comCharArrayToString e StringToCharArray. Embora minha intuição me diga que dificilmente será mais rápido do que a comunicação através da descrição dos objetos МТ. Mas eu posso estar errado. Vamos ver...

Peter, você fez um wild card desde o início, e agora você está discutindo sobre o desempenho das mensagens dentro de seu wild card. Você entende: um fio é apenas um *** útil, nada mais. Qualquer dado é realmente apenas uma coleção de bytes em memória. Portanto, você é aconselhado a manusear bytes diretamente, mas você é teimoso como sempre não entende que a mesma corda é a mesma matriz de bytes. Assim, você não perde nada na conversão de cordas em uchar array. Mas ao analisar uma corda, seu desempenho realmente diminui. É por isso que toda sua intuição está faltando.

 
Vasiliy Sokolov:

1. Peter, você originalmente fez um jogo, e agora você está discutindo sobre o desempenho das mensagens dentro do seu jogo.

2.você entende: um fio é apenas um *** útil, nada mais. Qualquer dado é realmente apenas uma coleção de bytes em memória. Portanto, eles aconselham que você trabalhe com bytes diretamente, mas você é teimoso como sempre não entende que a mesma seqüência é a mesma matriz de bytes. Assim, você não perde nada na conversão de cordas para uchar array. Mas quando você analisa uma corda, seu desempenho realmente abranda.

3. Portanto, toda sua intuição é apenas uma falha.

1. "Wildness" - neste caso, é o seu entendimento, não o que eu fiz. Foram necessárias 75 páginas para que você entendesse do que se trata e do que se trata o motor. Entenda: Falhas e erros não caracterizam uma entidade. Nenhuma forma de essência caracteriza a própria essência. Assim como suas roupas não definem o tipo de pessoa que você é. Somente o pensamento errado julga o todo pelo particular.

2. é claro para mim como é. Vou verificar hoje se haverá um ganho real de velocidade usando a função StringToChar.

3. todos os dias eu verifico minha intuição. Duvido disso todos os dias. E com razão. Se falhar, você deve ser guiado pela Razão. Mas a razão é muito limitada, arrogante e estúpida para que se possa confiar sempre nela. Portanto, a intuição é a única alternativa. Se você sabe o que quero dizer...

Razão: