Dúvida sobre performance em criação de imagens  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Djonatah
JavaGuru
[Avatar]

Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline

Bom dia pessoal, estou com a seguinte situação.

Temos uma api para gerar gráficos (http://big.faceless.org/products/graph) que nativamente salva suas imagens em pdf, svg, png e flash, além de me fornecer a imagem como uma BufferedImage.

Como eu preciso das imagens em JPEG usei o BufferedImage associado a api JAI (https://jai.dev.java.net/).

O problema é que eu preciso criar 20 mil imagens (resolução 300dpi. tamanho - 20cm x 10cm). Esse processo está me tomando cerca de 4h+ (cerca de 75 imagens/min em "best case scenario").

Pergunta - há alguma maneira de eu dar uma melhorada em meu processo (eu sei que não é apenas o armazenamento da imagem que está me tomando tempo, mas é onde eu teria que dar uma melhorada por enquanto).

Aqui vai uma parte de meu código.




Obrigado pelas opiniões.
E uma ótima semana a todos

Abraços
<><

--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes

" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3
[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Vou fazer uma perguntinha boba.

É possível você rodar esse processo em uma máquina com vários processadores (um Core2Duo ou um Pentium Dual Core já serve) , e dividir seu trabalho em várias threads (1 por processador, já que o processo é realmente "compute-bound"?)

Você está gerando uma figura de 2,8 megapixel em menos de 1 segundo, incluindo a parte de criar o gráfico, que costuma ser razoavelmente lenta.

Então não parece que dá para melhorar "muito" isso aí.
[WWW]
Djonatah
JavaGuru
[Avatar]

Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline

Hmmm.... a questão sobre rodar em duas threads seria interessante, não havia pensado na idéia. Talvez haja uma pequena possibilidade... teria que conversar com uns colegas meus aqui sobre a possibilidade.


Outra questão é que esse processo já roda em um servidor relativamente rápido..Se não me engano é um processador Xenon..

De qualquer forma eu volto para postar um feedback.

Obrigado pela resposta Thingol

This message was edited 1 time. Last update was at 06/04/2009 09:58:31


--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes

" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3
[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Hum... não é bom você reduzir o número de cores, como você fez, se seu objetivo é converter para JPEG. Além de o gráfico ficar mais feio, o JPEG de qualquer maneira tenta processar tudo como se tivesse 8 bits por componente de cor (ou seja, 24 bits por pixel). Portanto, o processo de conversão para 256 cores talvez esteja deixando seu processo mais lento.
[WWW]
Djonatah
JavaGuru
[Avatar]

Membro desde: 11/05/2007 15:38:09
Mensagens: 204
Localização: São Bento do Sul - SC
Offline

Na verdade eu preciso fazer isso. A imagem em si contém transparência (a "saída padrão" da API é PNG), consequentemente se eu salvá-la da maneira como ela "sai da API" ela fica muito estranha (cores erradas).


Além do processador, vou tentar umas outras situações aqui (formato da imagem de saída, e obter a BufferedImage sem processamento das cores..)


Mais uma vez obrigado.

<><

--------------------------------------------------
" Daria tudo o que sei, pela metade do que ignoro " - Descartes

" Tudo tem seu tempo, cada coisa tem sua ocasiao " - Eclesiastes 3
[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team