Reflection diminui a performance?

13 respostas
J

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.

O que vcs acham?

[]s

13 Respostas

louds

Chamar um método via reflection é significativamente mais lento que chamá-lo diretamente. Isso importa no seu caso?

J

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

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

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! :slight_smile:

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

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

Eu chuto que invocar 30 métodos apenas uma vez não vai causar um prejuízo considerável de performance. É um palpite…

cv1

Pra que chutar? Pega um profiler e ve, uai.

Criado 21 de setembro de 2006
Ultima resposta 22 de set. de 2006
Respostas 13
Participantes 6