DESCARREGAR MEMORIA NO UNLOAD
Amigos,
Sei que ando sumido, mas é por uma boa causa (pelo menos pra mim
).
Há um mês, instalei meu pograminha de trà ¢mite de processos aqui na prefeitura. Bom, no começo ele era só pro meu Departamento, mas com minha incrÃvel capacidade de prever o futuro, já o deixei preparado pra ser usado pelos demais setores (afinal, o pograminha oficial é uma meleca). O truque é simples: quando o usuário digita sua senha, o pograminha identifica o setor ao qual ele pertence e só puxa os processos que são do setor dele. Aà ele pode manipulá-los à  vontade, e se quiser saber sobre um processo que esteja em outro lugar, o pograminha permite a pesquisa no BD e mostra onde ele está, e etc e tal.
Ontem a chefe do Protocolo me procurou e disse que, se o treco aguentar uma quantidade maciça de processos pra manipular, o Tijolão (sim, é esse o nome do pograminha; e a história é meio longa) deve ser adotado pela prefeitura toda.
Aà vem o pobrema: o Tijolão carrega uma treeview com os processos do setor. Onde trabalho, a quantidade de processos em circulação é respeitável (estamos agora com 11000 processos na árvore) e acho que só o JurÃdico nos faz frente quanto à  "população flutuante" de processos. Resolvi fazer uma simulação com 55000 processos e o Tijolão se portou muito bem, mas leva muuuuito tempo pra descarregar a árvore da memória, o que pode virar uma chateação.
Agora, a pergunta: tem método mais eficiente do que o unload do form pra descarregar a treeview? Dá pra "matar" a árvore de uma paulada só, sem o sistema ir descarregando nó por nó?
Sei que ando sumido, mas é por uma boa causa (pelo menos pra mim

Há um mês, instalei meu pograminha de trà ¢mite de processos aqui na prefeitura. Bom, no começo ele era só pro meu Departamento, mas com minha incrÃvel capacidade de prever o futuro, já o deixei preparado pra ser usado pelos demais setores (afinal, o pograminha oficial é uma meleca). O truque é simples: quando o usuário digita sua senha, o pograminha identifica o setor ao qual ele pertence e só puxa os processos que são do setor dele. Aà ele pode manipulá-los à  vontade, e se quiser saber sobre um processo que esteja em outro lugar, o pograminha permite a pesquisa no BD e mostra onde ele está, e etc e tal.
Ontem a chefe do Protocolo me procurou e disse que, se o treco aguentar uma quantidade maciça de processos pra manipular, o Tijolão (sim, é esse o nome do pograminha; e a história é meio longa) deve ser adotado pela prefeitura toda.
Aà vem o pobrema: o Tijolão carrega uma treeview com os processos do setor. Onde trabalho, a quantidade de processos em circulação é respeitável (estamos agora com 11000 processos na árvore) e acho que só o JurÃdico nos faz frente quanto à  "população flutuante" de processos. Resolvi fazer uma simulação com 55000 processos e o Tijolão se portou muito bem, mas leva muuuuito tempo pra descarregar a árvore da memória, o que pode virar uma chateação.
Agora, a pergunta: tem método mais eficiente do que o unload do form pra descarregar a treeview? Dá pra "matar" a árvore de uma paulada só, sem o sistema ir descarregando nó por nó?
MaxMummy
Prezado Max
A rigor o Clear deveria dar conta do Recado.
Teste e veja se funciona.
Note que 11.000 processos em um TreeView podem demandar um bom tempo de preenchimento em máquinas antigas, não sei como é que anda o tempo de preenchimento do teu TIJOLÃO.
Até Breve
[s50]
Prezado Max
A rigor o Clear deveria dar conta do Recado.
treemenu.Nodes.Clear
Teste e veja se funciona.
Note que 11.000 processos em um TreeView podem demandar um bom tempo de preenchimento em máquinas antigas, não sei como é que anda o tempo de preenchimento do teu TIJOLÃO.
Até Breve
[s50]
Kpella,
Já testei o clear na rotina do unload, mas o tempo foi praticamente o mesmo.
O tempo de carregamento é sensivelmente menor do que o de descarregamento. Aos interessados já aviso que só instalo em máquinas com 1.2GHz ou mais (se bem que roda bem em casa, com meu PIII 750), de modo que o usuário nem vê a árvore ser carregada. Na hora de fechar, leva-se alguns segundos (entre 3 e 10, conforme a máquina e o tamanho da árvore), de modo que aconselho os usuários a deixar o Tijolão aberto.
Mas, pode ser preciosismo meu, não estou gostando dessa demora. Lembremos que o Explorer descarrega a árvore instantaneamente, e ele lida com muito mais nós do que eu. Tem que ter algum truque pra tirar os nós tão rápido da memória.
Já testei o clear na rotina do unload, mas o tempo foi praticamente o mesmo.
O tempo de carregamento é sensivelmente menor do que o de descarregamento. Aos interessados já aviso que só instalo em máquinas com 1.2GHz ou mais (se bem que roda bem em casa, com meu PIII 750), de modo que o usuário nem vê a árvore ser carregada. Na hora de fechar, leva-se alguns segundos (entre 3 e 10, conforme a máquina e o tamanho da árvore), de modo que aconselho os usuários a deixar o Tijolão aberto.
Mas, pode ser preciosismo meu, não estou gostando dessa demora. Lembremos que o Explorer descarrega a árvore instantaneamente, e ele lida com muito mais nós do que eu. Tem que ter algum truque pra tirar os nós tão rápido da memória.
Max
Tu já tentou usar o Visible = False?
Em diversos casos há uma grande variação.
[s92]
Tu já tentou usar o Visible = False?
Em diversos casos há uma grande variação.
[s92]
Max,
Tenta o seguinte, crie um treeView de trabalho com o nome "treeview_limpa" sem nada dentro, e faz o set para ela no "query_unload" do form. Verifique o tempo e vê se vale a pena.
set TreeView = treeview_limpa
Desculpa a gambiarra, mas não tive uma outra idéia.
Até mais,
Tenta o seguinte, crie um treeView de trabalho com o nome "treeview_limpa" sem nada dentro, e faz o set para ela no "query_unload" do form. Verifique o tempo e vê se vale a pena.
set TreeView = treeview_limpa
Desculpa a gambiarra, mas não tive uma outra idéia.
Até mais,
Ou tente isso também no query_unload,
Set Form1 = Nothing
Set Form1 = Nothing
Meu leve e esbelto amigo:
Não consigo imaginar que a demora no trabalho de descarga seja causado pelo Treeview em sà mesmo. Já verificou se o problema não está relacionado á outros componentes, como Recordset e tal?
De qualquer forma, independente do nº de nodes, a rotina abaixo "acaba" com um Treeview quase de forma instantà ¢nea (eu tive a pachorra de testar exaustivamente, alterando todas as variáveis possÃveis no código).
...
With TreeView1
.Visible = False
.Nodes.Clear
End With
...
Uma variante (levei quase dois dias para chegar nessa variante, fiquei exaurido com as implicações da metodologia adotada) é:
...
Dim o As Node
With TreeView1
.Visible = False
For Each o In .Nodes
.Nodes.Remove o.Index
Next
End With
...
Agora, de forma mais séria (desculpe a brincadeira):
Caso o nº de nós de um TreeView seja muito elevado, ele realmente é bem mais lento do que outros objetos de visualização de massas de dados. Seria mais interessante substituir por uma grade de dados, mesmo um MSHFlexgrid. Não apenas o desempenho do Form será melhor, mas também a manutenção será mais fácil.
Não consigo imaginar que a demora no trabalho de descarga seja causado pelo Treeview em sà mesmo. Já verificou se o problema não está relacionado á outros componentes, como Recordset e tal?
De qualquer forma, independente do nº de nodes, a rotina abaixo "acaba" com um Treeview quase de forma instantà ¢nea (eu tive a pachorra de testar exaustivamente, alterando todas as variáveis possÃveis no código).
...
With TreeView1
.Visible = False
.Nodes.Clear
End With
...
Uma variante (levei quase dois dias para chegar nessa variante, fiquei exaurido com as implicações da metodologia adotada) é:
...
Dim o As Node
With TreeView1
.Visible = False
For Each o In .Nodes
.Nodes.Remove o.Index
Next
End With
...
Agora, de forma mais séria (desculpe a brincadeira):
Caso o nº de nós de um TreeView seja muito elevado, ele realmente é bem mais lento do que outros objetos de visualização de massas de dados. Seria mais interessante substituir por uma grade de dados, mesmo um MSHFlexgrid. Não apenas o desempenho do Form será melhor, mas também a manutenção será mais fácil.
Progressos.
Coloquei o visible do form = false no queryunload (ótima participação dos colegas KPella e Leopoldo; o visible no form_unload não resolve; tem que ser no queryunload). Pelo menos o processo de descarregamento não fica visÃvel para o usuário. Como eu não proibi novas instà ¢ncias do Tijolão na máquina, então não há problema do usuário reabri-lo imediatamente após fechá-lo.
Mas a tarefa continua aberta. Me lembro vagamente que o sistema de arquivos é carregado na inicialização do Windows (ou antes), então intuo que a árvore que a gente carrega no Explorer já está na memória, e quando o fechamos, não jogamos a árvore fora, ficando essa tarefa para o momento em que desligamos a máquina. Seria esse o segredo do Explorer?
Coloquei o visible do form = false no queryunload (ótima participação dos colegas KPella e Leopoldo; o visible no form_unload não resolve; tem que ser no queryunload). Pelo menos o processo de descarregamento não fica visÃvel para o usuário. Como eu não proibi novas instà ¢ncias do Tijolão na máquina, então não há problema do usuário reabri-lo imediatamente após fechá-lo.
Mas a tarefa continua aberta. Me lembro vagamente que o sistema de arquivos é carregado na inicialização do Windows (ou antes), então intuo que a árvore que a gente carrega no Explorer já está na memória, e quando o fechamos, não jogamos a árvore fora, ficando essa tarefa para o momento em que desligamos a máquina. Seria esse o segredo do Explorer?
Professor,
Não me vejo como "leve" e "esbelto".
Um "Lindão" já basta.
Pelos testes, a culpa é dele mesmo. O clear "mata" a árvore, mas congela a tela, e no fim, leva o mesmo tempo que levaria pra matá-la usando o unload do form. Pro usuário, é muito melhor ver a tela fechar de forma instantà ¢nea. Dá impressão de que o aplicativo é "profissional", apesar do processo de fechamento continuar em 2º plano. Bom, isso é o que deu aqui até agora.
A adoção do treeview foi por causa da interface com o usuário - que ficou bem intuitiva, graças ao Explorer. Faz parte da minha estratégia para propagar o uso do Tijolão: a turma adora arrastar e soltar processo pra lá e pra cá. Todo mundo vira criança jogando videogame e acaba vendo as outras vantagens do meu pograminha. Tem gente que não quer ver meu concorrente nem pintado de ouro
Não me vejo como "leve" e "esbelto".
Um "Lindão" já basta.
Pelos testes, a culpa é dele mesmo. O clear "mata" a árvore, mas congela a tela, e no fim, leva o mesmo tempo que levaria pra matá-la usando o unload do form. Pro usuário, é muito melhor ver a tela fechar de forma instantà ¢nea. Dá impressão de que o aplicativo é "profissional", apesar do processo de fechamento continuar em 2º plano. Bom, isso é o que deu aqui até agora.
A adoção do treeview foi por causa da interface com o usuário - que ficou bem intuitiva, graças ao Explorer. Faz parte da minha estratégia para propagar o uso do Tijolão: a turma adora arrastar e soltar processo pra lá e pra cá. Todo mundo vira criança jogando videogame e acaba vendo as outras vantagens do meu pograminha. Tem gente que não quer ver meu concorrente nem pintado de ouro

Tópico encerrado , respostas não são mais permitidas