Fórum out of memory - vetor dinâmico grande #320233

28/04/2006

0

Pessoal eu estou utilizando um vetor dinâmico de um record com integers, datetimes e strings limitados.

Nesse vetor dinâmico, ciclicamente são executados SetLenth para que o vetor suporte os dados que serão inseridos nele e o intervalo de tempo entre um setlength e outro não é muito grande (+/- 3 segundos). O problema é que em um dado momento está sendo apresentada a mensagem ´OUT OF MEMORY´.

Antes que alguem imagine errado, eu Não estou fazendo o setlength indice-a-indice ou linha-a-linha (como queiram).

Eu fiz algumas alterações no código para que o os ciclos do setlength sejam maiores, ou seja, eu atribuo a ele uma quantidade maior de indices e só dou um novo SetLength quando a quantidade de indices é insuficiente para a nova carga de dados.

Refletindo sobre isso eu estou imaginando que o delphi (7) utilizando a unit sharemem (pois é uma dll parruda) têm um sério problema quanto ao tal SetLength. Aparentemente ele cria uma nova alocação para o novo length do vetor, transfere os dados para a nova porção de memória alocada, mas demora para eliminar os dados da alocação anterior do vetor (do length anterior). Daí então o problema de ´Out of memory´.

Eu ja pesquisei na net, no livro ´Delphi in a Nutshell´ mas não encontrei nenhuma documentação que confirme a minha conslusão.

Alguém faz idéia do realmente ocorre com o setlength nesse caso?


Obs.: Eu disse que o vetor é grande pois seu tamanho será superior a 500.000.


Silvermask

Silvermask

Responder

Posts

28/04/2006

Amarildo

Alex, este erro ocorre em que situação, no meio do processo ou quando vai dar o star para inicializar. Tive um problema parecido, só que descobri por que a variavel era muito extensa, nao sei se seja o seu caso. Vou estar pesquisando, felicidades e sucesso.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar