Se você quer determinar se há de fato vazamento de memória em um um
trecho de código, coloque este código pra executar continuamente e
monitore a memória. Se o consumo de memória daquele programa
estabilizar depois de um tempo, sem consumir mais memória, ele não tem
vazamento. Se por outro lado ele continuar pegando mais e mais memória
do sistema, o trecho tem vazamento.
Mas você dificilmente vai ver a quantidade de memória usada pelo
processo diminuindo, a não ser quando o processo morre.
Abraços, Leo
Isso é assim mesmo; tanto é que no Zope, quando você tem que fazer
algo semelhante, é indicado que você use o ZCatalog (e no Plone, o
portal_catalog). Usando um catalogo de objetos, você consegue "varrer"
ponteiros para os objetos sem colocar os objetos propriamente ditos
integralmente na memória.
>
> Sei que pouca gente usa o ZODB stand-alone como eu, e se vc "forka" um
> processo para cada conexão, não vai ter este problema. Mesmo assim eu
> preciso varrer todos os objetos em uma única conexão e meu processo
> esta comendo 1.4GB!!!
>
Bem, como você ta fazendo isso "na raça", acho que a única solução é
você pensar uma estrutura de dados que sumarize aquilo que você
realmente precisa obter ao varrer os objetos. Essa estrutura poderia
ser uma lista persistente de tuplas, por exemplo, onde uma das
posições dessa tuple seria um apontador para o objeto real, caso você
precise coloca-lo em memória.
Rasteiramente falando, é exatamente isso que o ZCatalog faz,
implementa uma estrutura de dados de indices e metadata para permitir
que voce varra o conteudo do ZODB sem ficar percorrendo objeto por
objeto, justamente para não ter que colocar tudo em memória.
--
Fabiano Weimar dos Santos (xiru)
Weimar Consultoria
Hospedagem Plone, Zope e Python
http://www.pytown.com
[snip]
>
> Bem, como você ta fazendo isso "na raça", acho que a única solução é
> você pensar uma estrutura de dados que sumarize aquilo que você
> realmente precisa obter ao varrer os objetos. Essa estrutura poderia
> ser uma lista persistente de tuplas, por exemplo, onde uma das
> posições dessa tuple seria um apontador para o objeto real, caso você
> precise coloca-lo em memória.
O Johan Dahlin tinha feito algo para o ZODB que se chamava
IndexedCatalog [1]. Mas isso faz um tempo já e não sei se está
funcionando.
[]'s
Fernando