+4 votos
127 visitas

Sabe-se que independente do escopo, uma variável VB tem o tempo de vída da procedure que a instacia. Mas como no sistema Benner o VB é executado internamente e acredito que deva ter algumas particularidades quero saber quanto ao tempo de vida de uma variável "Objeto" que instacio numa macro. 

Conversando com quem trabalha a mais tempo, me mostraram que a muito vem-se utilizando o comando :

Set obj = Nothing

Uma linha acima do End Sub, ou seja no fim da procedure, com o intuito de limpar a variável. Ninguém soube me dar certeza se este comando é realmente necessário e o pessoal utiliza apenas por garantia.

Será que devemos continuar fazendo isto, ou o VB me garante que a variável será destruida ao fim da macro?

por (21 pontos) | 127 visitas

1 Resposta

+5 votos
Melhor resposta

É bem comum um evento de macro criar apenas um objeto BPesquisa e liberar ele ao fim, uma linha antes do End Sub. Considernado que o VB libera para você, num primeiro momento, pode parecer um código desnecessário e repetitivo. Mas caso ocorra um problema na liberação do objeto, você vai saber que o erro ocorreu na linha Set obj = Nothing. Ou seja, vai ficar claro que o problema é ali.

Deixar para o contador de referências do VB liberar o objeto no End Sub, pode ficar dificil de diagnostícar caso tenha algum bug no destrutor do objeto (que geralmente é implementado em Delphi ou C#),

Além disso o ideal é você liberar os objetos explicitamente se não for mais utilizá-los. Imagine uma macro onde você cria vários objetos durante sua execução. O ideal é que você os libere assim que terminar de utilizá-los, evitando desperdício de memória. Algumas macros são pequenas e talvez isso pareca uma preocupação tola. Mas com o tempo elas crescem (manutenção, implementações, etc) e acredito que adotando esta prática você garante uma vida mais tranquila no futuro.

 

 

por (865 pontos)
selecionada por
Certo, se é tão importante liberar os objetos, não seria o caso de liberar variáveis do tipo inteiro, string, ... também??
Essas você não precisa liberar, nem mesmo há uma forma de fazer isso. No VB esses tipos não são objetos. Em resumo, tudo o que você utiliza a palavra reservada "Set", é um objeto e deveria ser liberado com Set obj = Nothing se não for mais utilizado.

Perguntas relacionadas

0 votos
1 resposta
perguntado 23 Jul, 2015 por Anderson Roberto (30 pontos) | 86 visitas
+5 votos
1 resposta
+2 votos
2 respostas
perguntado 17 Jul, 2015 por matheus.silva (120 pontos) | 79 visitas
+7 votos
1 resposta
perguntado 16 Out, 2014 por edvaldo.gomes (173 pontos) | 106 visitas
+8 votos
1 resposta
perguntado 9 Mai, 2014 por paulo.silva (865 pontos) | 155 visitas
Melhores Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários