• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

paperless

Programa mais eficiente

4 mensagens neste tópico

Boas pessoal.

Estou a tentar fazer um pequeno programa que sugira soluções para palavras cruzadas ou problemas equivalentes (jogo da forca, por exemplo).

Ainda estou no ínicio e já me deparei com um pequeno (grande) problema.

Tenho um .txt com 688 mil palavras e para além de não conseguir guardar todas numa linkedlist (só guarda 200 001 palavras) acho uma solução pouco eficiente visto que come muita memoria.

Como é que posso resolver este problema?

Será possível ir lendo o ficheiro aos poucos sem ter de o por todo na memoria?

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho um pequeno editor similar ao sistema latex num trabalho académico que tem mais ou menos o mesmo número de palavras, dado que tem  um dicionário de português carregado em memória. Carregar o dicionário demora alguns segundos mas todas as palavras cabem em memória e não não consome tanta quanto isso, nunca fiquei sem memória a executar o programa e não lhe altero o valor base e máximo de memória disponível, pelo que a JVM não tem mais de 64MB disponíveis para correr.

Uma lista não será a melhor estrutura de dados mas não percebo porque não consegues colocar todas as palavras, não conheço nenhuma limitação, além da memória disponível, que te impeça de colocar elementos dentro da lista. Além disso, no mesmo trabalho, não só tenho todo o dicionário carregado como também é criada uma lista ligada dupla que contém um objecto para cada palavra, elemento de pontuação, espaço entre palavras. Contém ainda uma outra lista para identificar a formatação aplicada ao texto.

Tudo isto funciona bastante bem sem consumir memória por aí além :)

Portanto, usar um SGBD seria uma opção, por exemplo o HSQDB é uma boa escolha sendo que ocupa muito pouco espaço, cerca de 600KB, e pode ser incorporado bem numa aplicação, além de ser implementado em Java.

Mas talvez fosse melhor pensares nas estruturas que estás a usar e tentares verificar porque é que estás a ter problemas de memória.

Podes ler um ficheiro aos poucos, mas acho que essa solução não é muito boa, se não tens o ficheiro todo carregado então vai ser mais lento fazer as pesquisas, só estarias da mudar o problema de sítio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu aconselho antes o H2 DataBase é muito semelhante ao hsqldb, alias os criadores de h2 são parte dos mesmo de hsql. Já use as duas e posso dizer que h2 está bastante melhor que hsql.

Tem muito boa documentação, tem um cliente integrado tipo myphpsql e tem melhor performance que hsql.

Para além disso permite criar bases de dados encriptadas, usar triggers etc....

http://www.h2database.com/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora