DISPOSE EM CLASSES

 Tópico anterior Próximo tópico Novo tópico

DISPOSE EM CLASSES

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#482004 - 29/05/2018 19:35:11

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Boa noite,

Como faço para colocar um método despose nas minhas classes? levando em consideração que uso em camadas (Entity, DAL, BLL, FrameWork) teria que colocar em todas?

O porque preciso disso? Montei uma tela com uma timer que a cada 5 segundos faz uma conexão com o banco de dados de modo assíncrono para não travar e continuar fluindo, até ai perfeitamente funcionando do jeito que queria! Porem percebi que ao decorrer do tempo, começa a ficar mais lento, quanto mais tempo passa, mais lento/travando fica, seria a solução descartar a instância da classe? (Dim Us As New Classe / Us.Dispose) Isso resolveria meu problema?

__________________________________
- Everyone has a chance

Resposta escolhida #482008 - 29/05/2018 20:28:45

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Você precisa implementar a interface IDisposable nas suas classes, mas somente isso não adiantaria, você também precisa fazer uso de blocos using nos objetos que implementem IDisposable, que é o caso da maioria dos objetos de banco de dados.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482013 - 29/05/2018 22:55:44

JABA
CABO FRIO
Cadast. em:Agosto/2005


Citação:
seria a solução descartar a instância da classe? (Dim Us As New Classe / Us.Dispose) Isso resolveria meu problema?


Acredito que sim. Nesse tipo de situação você pode trabalhar com métodos shared, assim não haverá a necessidade de instâncias.

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#482014 - 29/05/2018 23:15:40

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Citação:
:
seria a solução descartar a instância da classe? (Dim Us As New Classe / Us.Dispose) Isso resolveria meu problema?

Acredito que sim. Nesse tipo de situação você pode trabalhar com métodos shared, assim não haverá a necessidade de instâncias.

Desculpe, mas isso é PÉSSIMA idéia. É como disse, use a interface IDisposable e blocos using em todos os objetos que a implementem.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482015 - 29/05/2018 23:44:15

JABA
CABO FRIO
Cadast. em:Agosto/2005


Citação:
Desculpe, mas isso é PÉSSIMA idéia. É como disse, use a interface IDisposable e blocos using em todos os objetos que a implementem.


Classes de serviço não guardam estado.

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#482017 - 30/05/2018 09:24:46

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Ok, vá fazendo assim então...

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482023 - 30/05/2018 23:07:26

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Então, na minha classe de Conexão eu uso o bloco Using no OledbDataReader no OledbDataCommand...

E Sobre o iDisposeble, seria dessa forma;?

   ' IDisposable
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not disposedValue Then
            If disposing Then
                ' Me.Dispose()    ' TODO: descartar estado gerenciado (objetos gerenciados).
            End If

            ' TODO: liberar recursos não gerenciados (objetos não gerenciados) e substituir um Finalize() abaixo.
            ' TODO: definir campos grandes como nulos.
        End If
        disposedValue = True
    End Sub

    ' TODO: substituir Finalize() somente se Dispose(disposing As Boolean) acima tiver o código para liberar recursos não gerenciados.
    Protected Overrides Sub Finalize()
        ' Não altere este código. Coloque o código de limpeza em Dispose(disposing As Boolean) acima.
        Dispose(False)
        MyBase.Finalize()
    End Sub

    ' Código adicionado pelo Visual Basic para implementar corretamente o padrão descartável.
    Public Sub Dispose() Implements IDisposable.Dispose
        ' Não altere este código. Coloque o código de limpeza em Dispose(disposing As Boolean) acima.
        Dispose(True)
        ' TODO: remover marca de comentário da linha a seguir se Finalize() for substituído acima.
        GC.SuppressFinalize(Me)
    End Sub


E ao instanciar ex;

Dim t As New Dl_Users
t......
t.Dispose()

Certo?

__________________________________
- Everyone has a chance

#482024 - 30/05/2018 23:10:37

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


E kerp, porque seria uma péssima ideia usar métodos Shared?

__________________________________
- Everyone has a chance

#482025 - 31/05/2018 00:52:15

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Não se esqueça dos blocos using nas suas chamadas de banco

using (OleDbConnection cn = new OleDbConnection("sua connection string"))
{
    try
    {
        cn.Open();
    }
    catch (ex as Exception)
    {
        //tratar erros genéricos, usar tipos de exceptions específicas do oledbconnection
    }
    using (OleDbCommand cmd = new OleDbCommand("SELECT bla bla bla", cn))
    {
        using (OleDbDataReader dr = cmd.ExecuteReader())
        {
            //ler seu data reader conforme quiser
        }
    }
}


Sem usar os blocos using, de nada vai adiantar você ter implementado o IDisposable. Além disso, quando usar sua classe, use-a com blocos using:

using (SuaClasse cla = new SuaClasse())
{
   //fazer aqui o que quiser...
}


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482026 - 31/05/2018 01:15:03

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Citação:
:
E kerp, porque seria uma péssima ideia usar métodos Shared?

Classes estáticas(Shared no VB), não são instanciáveis. Elas são usadas para casos onde operações estáticas são realizadas, ou seja, operações que não requerem instância por serem únicas. Por exemplo, uma classe estática para calcular juros ou idade. No seu caso, com certeza você terá múltiplas instâncias de classe, afinal, seus métodos irão sem dúvida retornar List<T> de seus objetos de banco de dados. Classes estáticas apesar de sintaticamente serem mais simples de serem usadas, são mais leves mas não são indicadas quando é necessário o uso de múltiplas instâncias.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482028 - 31/05/2018 12:57:17

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


E esse iDisposable, teria que colocar em todas as camadas das classes?

__________________________________
- Everyone has a chance

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por NOWLIGHTS em 20/06/2018 10:17:42