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.
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)