Eu tenho uma classe com aproximadamente 30 métodos.
Os nomes desses métodos estão em um arquivo de configuração.
Eu queria chamar os métodos através de reflection.
Mas me disseram que provoca uma perda de performance significativa.
Chamar um método via reflection é significativamente mais lento que chamá-lo diretamente. Isso importa no seu caso?
J
jdeveloper
louds:
Chamar um método via reflection é significativamente mais lento que chamá-lo diretamente. Isso importa no seu caso?
A aplicação atualmente demora em torno de 15 minutos para executar completamente. O que já é considerado bastante.
Então, se reflection vai deixar o sistema mais lento, não vale a pena.
Obrigado
fenrir
Se toda vez que você for chamar o método, o fizer usando Reflection, então a lentidão é considerável.
Mas se isso ocorrer apenas uma vez, a demora é desprezível, já que estamos falando de, no máximo, alguns poucos segundos (chutando absurdamente alto).
Agora, se estiver fazendo isso TODA vez que chama um método, não é caso de mantê-lo em cache?
louds
Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.
O problema mais comum é banco de dados, seguido de I/O em disco.
J
jdeveloper
fenrir:
Se toda vez que você for chamar o método, o fizer usando Reflection, então a lentidão é considerável.
Mas se isso ocorrer apenas uma vez, a demora é desprezível, já que estamos falando de, no máximo, alguns poucos segundos (chutando absurdamente alto).
Agora, se estiver fazendo isso TODA vez que chama um método, não é caso de mantê-lo em cache?
Eu chamo apenas uma vez cada método, mas eu chamo mais de 30 métodos.
Então eu acho que a soma dos tempos seria muito alta.
fmeyer
louds:
Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.
O problema mais comum é banco de dados, seguido de I/O em disco.
Os meus foram respectivamente, Programadores incompetentes. Storage ( incluindo DB, Arq, … ) Garbage collectors psicopatas
J
jdeveloper
louds:
Reflection normalmente figura como um dos últimos vilões de performance em todos os sistemas que tive de fazer profiling.
O problema mais comum é banco de dados, seguido de I/O em disco.
Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.
Esse tempo é por causa das procedures?
cv1
jdeveloper:
Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.
Esse tempo é por causa das procedures?
O que te leva a ter alguma duvida sobre isso?
fenrir
Eu chamo apenas uma vez cada método, mas eu chamo mais de 30 métodos.
Então eu acho que a soma dos tempos seria muito alta.
Quando eu escrevi “alguns poucos segundos”, me referi à soma de todas as chamadas, e não alguns poucos segundos para cada chamada! Se a linguagem demorasse tanto assim pra fazer Reflection, poucos programas em Java rodariam em velocidade maior que tartaruga!
jdeveloper:
Eu carrego os parâmetros de um arquivo e chamo uma stored procedure. O programa demora uns 15 minutos pra executar completamente.
Esse tempo é por causa das procedures?
Essa sua pergunta e seu comentário me levam a crer que você está chutando que a demora é por causa do Reflection. Já rodou um profiler? Ou um simples log pra ver exatamente onde está a demora na execução?
J
jdeveloper
fenrir:
Essa sua pergunta e seu comentário me levam a crer que você está chutando que a demora é por causa do Reflection. Já rodou um profiler? Ou um simples log pra ver exatamente onde está a demora na execução?
Se você ler novamente os meus posts verá que eu não disse que estava usando reflection, e sim que estava pensando em usar. Pois, queria saber se a diminuição de performance, no meu caso, seria significativa.
Eu tenho pouco conhecimento de banco de dados e apesar de achar que a demora na execução era por causa da stored procedure, eu não tinha certeza disso. Pois, o Louds disse que I/O tb deixa o sistema lento e eu uso bastante leitura de disco.
fenrir
Ops…sorry!! My mistake! :oops:
Mas descobrir se o problema é a procedure é relativamente simples: veja quanto tempo demora (pegando a hora de início e a hora de fim). E talvez fazer um “profile” no banco também seja interessante. De repente a inclusão de alguns índices nas tabelas não acelere consideravelmente o processo…
C
carneiro
Eu chuto que invocar 30 métodos apenas uma vez não vai causar um prejuízo considerável de performance. É um palpite…