Ir para conteúdo
  • Cadastre-se

dev botao

ACBrLib, Estudo Sobre a Otimização nas Chamadas


alberonisse
  • Este tópico foi criado há 1285 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

O intuído  desse tópico é apenas para exibir os vídeos que postei em meu canal do youtube sobre um estudo que fiz na ACBrLib e alterei a forma como é feita as chamaras e retornos na tentativa de otimizar ainda mais nesse sentido, resumindo a forma como é feira essa comunicação, Agradecimento especial ao ACBr e todos que fazem parte desse projeto maravilhoso. 
CONFIRAM OS VIDEOS 

Vídeo 1: https://youtu.be/lf130_Gtx3o

Vídeo 2: https://youtu.be/ap2w20VsEsA

Video 3: https://youtu.be/PyKwrYLl4ao

 

Editado por alberonisse
Removi uma quebra de linha
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

23 minutos atrás, Rafael Dias disse:

Em qual chamada ?
Não vi nenhuma, isso é codigo nativo e não gerenciado, se você não desalocar a memoria fica para sempre la.

Chefe você sabe que quando carregamos uma dll para um processo é o mesmo que injetar um novo codigo no mesmo então tanto a lib como o aplicatico que a carregou vai ter acesso aos mesmos dados na memória ram, o ponteiro nada mais é que o endereço para esses dados, acredito que o amigo também já viu que em todas as chamadas a própria lib armazena o retorno na struct "TLibRetorno" para ser usado pela função "UltimoRetorno" caso seja necessário, então o que fiz foi apenas resumir o processo e já pegar essa struct direto na memoria ram

Link para o comentário
Compartilhar em outros sites

Não sei que manual tu leu mas eu tenho certeza que se eu mexer no seu ponteiro de forma unsafe posso bagunçar a memoria e com certeza vai dar acess violation.
Para você ter uma ideia bibliotecas mas antigas e maiores que esta nossa já usam de forma similar a que usamos, veja a libxml2 como ela funciona.

 

Link para o comentário
Compartilhar em outros sites

Acho que sua duvida é em relação ao aplicativo, então vou explicar essa parte também, como na modificação que fiz na struct "TLibRetorno" para armazenar o tamanho da mensagem, o aplicativo quando LER esses dados ele primeiro faz a alocação usando essa informação e faz uma copia da mensagem, entendeu?, veja o vídeo 3 que você vai entender melhor 

Editado por alberonisse
Link para o comentário
Compartilhar em outros sites

Eu entendi exatamente o que quer fazer, mas isso adiciona uma dificuldade desnecessária, além de ser uma mudança grande e impactante ao codigo.

Sobre o que você fez na parte cliente do Java tem como fazer structs usando o JNA tbm, então não tem necessidade daquele monte de codigo bastava gerar uma classe herdando da classe Struct.

https://stackoverflow.com/questions/36747228/c-struct-to-java-jna-structure-pointer-to-struct

 

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Rafael Dias disse:

Eu entendi exatamente o que quer fazer, mas isso adiciona uma dificuldade desnecessária, além de ser uma mudança grande e impactante ao codigo.

Sobre o que você fez na parte cliente do Java tem como fazer structs usando o JNA tbm, então não tem necessidade daquele monte de codigo bastava gerar uma classe herdando da classe Struct.

https://stackoverflow.com/questions/36747228/c-struct-to-java-jna-structure-pointer-to-struct

Em relação a mudança no código oficial eu também não faria pois seria extremamente estressante para quem já usa atualmente, como falei no vídeo e na descrição é apenas para estudo, em relação a struct java jna eu sei e não vi motivo pra usar, MEU REI, não é feio reconhecer quando uma melhoria é uma melhoria independente de qualquer coisa, não me acho melhor que neguem só porque estudo, os livros estão disponíveis pra quem quiser,  agora me diga uma coisa sr moderador meu humilde conhecimento lhe incomodou? não soma forças ao projeto? sinto que você quer derrubar meu posicionamento sem antes verificar com cautela, me diga uma coisa, essa partícula de poeira no universo de meu Deus soma ou não soma ao projeto ACBr? 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu acho que isso dificultaria o uso da Lib por Outros programadaores...

Ja temos muitas aplicações rodando no modelo de troca de mensagens atuais... mudar isso, quebraria a compatibilidade 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Daniel Simoes disse:

Eu acho que isso dificultaria o uso da Lib por Outros programadaores...

Ja temos muitas aplicações rodando no modelo de troca de mensagens atuais... mudar isso, quebraria a compatibilidade 

Concordo com o amigo, inclusive pensei nisso antes de fazer os vídeos, mais sem levar em consideração a possibilidade de alterar a lib oficial e como é uma alteração simples os próprios usuários podem fazer e usar, essa alteração abre a possibilidade inclusive de retornar o xml da NF com muita facilidade 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

poucos usam a Lib diretamente... as Classes de alto nível, já abstraem as chamadas e a alocação de memória...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
1 hora atrás, alberonisse disse:

Em resumo é uma boa alteração que iria otimizar bastante mais só seria utilizado por usuários avençados, né isso?

Eu não creio isso... a modificação não trará mais performance...

Eu particularmente, não gosto de API que retornam tipos complexos, como uma estrutura...  gosto de soluções, simples... e o que pode ser mais simples que uma área de memória, com uma String Null-terminated ?

Esse é o padrão usado pela API do Windows, pelo OpenSSL, pela LibXML2, pelas DLLs de fabricantes de ECF e SAT, etc... ou seja.. é o padrão de mercado...

Porque todos usam dessa maneira ? Porque é simples de compreender, e amplamente compatível...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

45 minutos atrás, Daniel Simoes disse:

Eu não creio isso... a modificação não trará mais performance...

Eu particularmente, não gosto de API que retornam tipos complexos, como uma estrutura...  gosto de soluções, simples... e o que pode ser mais simples que uma área de memória, com uma String Null-terminated ?

Esse é o padrão usado pela API do Windows, pelo OpenSSL, pela LibXML2, pelas DLLs de fabricantes de ECF e SAT, etc... ou seja.. é o padrão de mercado...

Porque todos usam dessa maneira ? Porque é simples de compreender, e amplamente compatível...

Entendi, amigo @Daniel Simoes desculpe minhas "loucuras", tenho muito respeito pelo amigo e pelo projeto e não quero de forma alguma prejudicar, não vou mais fazer esse tipo de "Ajuda", nem vou mais me pronunciar aqui no forum pois não sei ficar calado quando estou certo, Desculpe mais tenho que falar isso: Em relação ao padrão de mercado, o mesmo inclusive api do win, jogos, drivers,  independente da linguagem pois tudo vai ser convertido para linguagem do processador, é alocar antecipadamente quando o length não é variável ou quando sei o length antecipadamente e apenas quando quero uma copia dos dados, quando acontece de ser variável se o tipo de informação for uma String é retornado um ponteiro com endereço da informação na memoria (Esse ponteiro não é armazenado na memoria e sim em um registrador do processador) ou alterado o do informado no parâmetro e para saber o final como o amigo falou é usado o byte 0 ou (String Null-terminated), Em relação ao Drive do SAT, retorna um ponteiro para uma String que dependendo da linguagem pode ou não fazer uma copia (Java tem que ser uma copia) e para saber o final  byte 0(String Null-terminated). 

DESCULPE NOVAMENTE E AGRADEÇO PELA OPORTUNIDADE

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1285 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.