Visual Basic .NET Language
Objets jetables
Recherche…
Concept de base d'IDisposable
Chaque fois que vous instanciez une classe qui implémente IDisposable
, vous devez appeler .Dispose
1 sur cette classe lorsque vous avez fini de l'utiliser. Cela permet à la classe de nettoyer toutes les dépendances gérées ou non gérées qu'elle peut utiliser. Ne pas le faire pourrait provoquer une fuite de mémoire.
Le mot-clé Using
s'assure que .Dispose
est appelé, sans que vous ayez à l' appeler explicitement .
Par exemple sans Using
:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
Maintenant avec l' Using
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
L'un des principaux avantages de l' Using
has est la levée d'une exception, car elle garantit que .Dispose
est appelée.
Considérer ce qui suit. Si une exception est levée, vous devez vous rappeler d'appeler .Dispose mais vous devrez peut-être aussi vérifier l'état de l'objet pour vous assurer que vous n'obtenez pas d'erreur de référence nulle, etc.
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
Catch ex As Exception
'Handle the Exception
Finally
If sr IsNot Nothing Then sr.Dispose()
End Try
Un bloc d'utilisation signifie que vous n'avez pas à vous en souvenir et que vous pouvez déclarer votre objet dans l' try
:
Try
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using
Catch ex As Exception
'sr is disposed at this point
End Try
1 Dois-je toujours appeler Dispose () sur mes objets DbContext? Nan
Déclarer plus d'objets en un
Parfois, vous devez créer deux objets Disposable
dans une rangée. Il existe un moyen simple d’éviter l’imbrication des blocs d’ Using
.
Ce code
Using File As New FileStream("MyFile", FileMode.Append)
Using Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
End Using
peut être raccourci dans celui-ci. Le principal avantage est que vous gagnez un niveau d'indentation:
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using