Jump to content
Notícias do ACBr

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

consultoria_sticker.png

Conteúdo para desenvolvedores
 ao vivo de terça a quinta!
Saiba mais

dev.png

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


botao.png

beneficios.png

ACBrLib, Estudo Sobre a Otimização nas Chamadas


  • Este tópico foi criado há 159 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

 

Edited by alberonisse
Removi uma quebra de linha
  • Like 1
Link to post
Share on other sites
9 minutos atrás, Rafael Dias disse:

So uma pergunta que vai desalocar a memoria das structs que ta retornando ?

O deslocamento é feito normalmente pela própria lib, o retorno é apenas do ponteiro para a struct que a lib armazena os dados do ultimo retorno

Link to post
Share on other 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 to post
Share on other 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.

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to post
Share on other sites

Eu falei de manipulação e não de leitura

Citar

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.

 

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to post
Share on other 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 

Edited by alberonisse
Link to post
Share on other 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

Consultor SAC ACBr Rafael Dias
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Desenvolvedor ACBrLib.

 

Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites
  • Fundadores

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

  • Like 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 to post
Share on other sites
12 minutos atrás, Daniel Simoes disse:

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

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

Link to post
Share on other 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 to post
Share on other 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 to post
Share on other sites
  • Este tópico foi criado há 159 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui
Guest
This topic is now closed to further replies.
×
×
  • Create New...