JExcel comendo sua memória? Fácil de resolver!

Eis o problema: você precisa gerar uma planilha gigantesca usando o JExcel e eis que de repente… BOOM! Um OutOfMemoryError ocorre salta em sua direção.

(Devo confessar: adoro esta biblioteca. Apesar de não ser tão abrangente quanto eu gostaria (não inclui gráficos), é simples o suficiente para que até um macaco consiga gerar arquivos no formato Excel sem problemas muito sérios. Mas problemas existem: e estouro de memória é um deles)

A solução é simples, e repousa na classe jxl.WorkbookSettings. Basicamente, consiste em dois métodos presentes na classe: se o seu problema de memória vier na hora de gerar uma planilha, utilize o código abaixo:


jxl.WorkbookSettings settings = new jxl.WorkbookSettings();
settings.setUseTemporaryFileDuringWrite(true);

Você irá instruir a biblioteca a utilizar um arquivo temporário no momento de geração da planilha. Caso seja definido como false (que é o default), todo o conteúdo do documento será armazenado em memória, levando ao famigerado OutOfMemoryError. Há perda de performance? Claro, mas é melhor esperar um pouco mais pelo resultado do que simplesmente nada ser gerado, não acha?

Se o seu problema dizer respeito à leitura de documentos, o código abaixo poderá resolver seu problema também:


jxl.WorkbookSettings settings = new jxl.WorkbookSettings();
settings.setInitialFileSize( tamanho em bytes );

A segunda instrução diz ao jxl qual a quantidade de memória a ser inicialmente alocada para a leitura do arquivo. Lhe trará problemas de performance? Talvez: depende do tamanho que você especifique. Por padrão (como pude ver no código fonte), a memória alocada é de 1 Mb.

1 Comment

Add Yours →

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.