VB.Net/Development/Garbage Collection

Материал из VB Эксперт
Версия от 15:45, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Force a garbage collect

<source lang="vbnet"> Imports System Imports System.Drawing Imports System.Data Imports System.IO Imports System.Collections Imports System.Windows.Forms Imports System.Drawing.Printing Public Class MainClass

   Shared Sub Main()
     Dim o As MyObject = New MyObject
     
     o = Nothing
     GC.Collect()
   End Sub

End Class

Public Class MyObject

   " Constructor - called when the object is started...
   Public Sub New()
       Console.WriteLine("Object " & GetHashCode() & " created.")
   End Sub
   " Finalize - called when the object is removed from memory...
   Protected Overrides Sub Finalize()
       MyBase.Finalize()
       " tell the user we"ve deleted...
       Console.WriteLine("Object " & GetHashCode() & " finalized.")
   End Sub

End Class


 </source>


Force Garbage Collection

<source lang="vbnet"> Imports System.IO Module Module1

   Sub Main()
       Dim c1 As New Contact("Name 1", "111-555-1111", "1@1.ru")
       Dim c2 As New Contact("Name 2", "222-555-1212", "2@2.ru")
       Dim c3 As New Contact("Name 3", "333-555-1212", "3@3.ru")
       
       c1 = Nothing " Discard the object
       GC.Collect()
       Console.WriteLine("Back from first collection")
       c3 = Nothing " Discard the object
       GC.Collect()
       Console.WriteLine("Back from second collection -- Press Enter")
       
   End Sub

End Module

   Class Contact
       Public Name As String
       Public Phone As String
       Public EMail As String
       Sub New(ByVal ContactName As String, ByVal ContactPhone As String, ByVal ContactEmail As String)
           Console.WriteLine("Name: " & ContactName & " Phone " & ContactPhone & " Email " & ContactEmail)
           Name = ContactName
           Phone = ContactPhone
           EMail = ContactEmail
       End Sub
       Protected Overrides Sub Finalize()
           Console.WriteLine("In Finalize for " & Name)
       End Sub
   End Class
          
        
 </source>


Garbage collection started

<source lang="vbnet"> Imports System Public Class MainClass

   Shared Sub Main(ByVal args As String())
       Dim myform As New Form1()
   End Sub

End Class

Public Class Form1

   Public Running As Boolean
   Private Class Junk
       Public MyForm As Form1
       Public Sub New(ByVal my_form As Form1)
           MyForm = my_form
       End Sub
       " Garbage collection started.
       Protected Overrides Sub Finalize()
           " Stop making objects.
           MyForm.Running = False
       End Sub
   End Class
   Public Sub New()
       Running = True
       Dim new_obj As Junk
       Dim max_i As Long
       For i As Long = 1 To 100000
           new_obj = New Junk(Me)
           If Not Running Then
               max_i = i
               Exit For
           End If
       Next i
       Console.WriteLine("Allocated " & max_i.ToString & " objects")
   End Sub

End Class


 </source>


GC Suppress Finalize me

<source lang="vbnet"> Imports System Imports System.Drawing Imports System.Data Imports System.IO Imports System.Collections Imports System.Windows.Forms Imports System.Drawing.Printing Public Class MainClass

   Shared Sub Main()
       Dim file As New MyFile("c:\FinalizeDemo.txt")
       " now, clear the reference to the object...
       file.Dispose()
       file = Nothing
       " wait for the user to press return...
       Console.WriteLine("Press Return to collect the garbage...")
       " force a collect...
       GC.Collect()
       " wait for the user to quit...
       Console.WriteLine("Press Return to quit...")
   End Sub

End Class

Public Class MyFile

   Implements IDisposable
   Private stream As FileStream
   Private isDisposed As Boolean
   Public Sub New(ByVal filename As String)
       stream = New FileStream("test.txt", FileMode.OpenOrCreate)
       Console.WriteLine("Object " & GetHashCode() & " created.")
       Console.WriteLine("Using file: " & filename)
   End Sub
   Public Sub Dispose() Implements System.IDisposable.Dispose
       If isDisposed = True Then Return
       
       stream.Close()
       stream = Nothing
       isDisposed = True
       GC.SuppressFinalize(Me)
       Console.WriteLine("Object " & GetHashCode() & " disposed.")
   End Sub
   Protected Overrides Sub Finalize()
       Dispose()
       Console.WriteLine("Object " & GetHashCode() & " finalized.")
   End Sub

End Class


 </source>


Get GC generation

<source lang="vbnet">

Module Module1

   Sub Main()
       Dim myObject As Object = New Object()
       Dim i As Integer
       For i = 0 To 3
           Console.WriteLine(String.Format("Generation = {0}", _
                             GC.GetGeneration(myObject)))
           GC.Collect()
           GC.WaitForPendingFinalizers()
       Next i
       Console.Read()
   End Sub

End Module


 </source>


Object Generation

<source lang="vbnet"> Imports System Imports System.Text Imports System.Text.RegularExpressions

Public Class MainClass

   Shared Sub Main(  )
   Dim myObject As Object = New Object()
   Dim i As Integer
   For i = 0 To 3
     Console.WriteLine(String.Format("Generation = {0}", _
                       GC.GetGeneration(myObject)))
     GC.Collect()
     GC.WaitForPendingFinalizers()
   Next i
   End Sub "Main
  

End Class


 </source>


Request garbage collection

<source lang="vbnet"> Imports System Public Class MainClass

   Shared Sub Main(ByVal args As String())
     Console.WriteLine("Students before instantiation: " & Student.Count)
     Dim student1 As Student = New Student("A", "B")
     Dim student2 As Student = New Student("C", "D")
     " output of student2 after instantiation
     Console.WriteLine("Students after instantiation: " & vbCrLf & _
        "via Student.Count: " & Student.Count)
     " display name of first and second student
     Console.WriteLine(vbCrLf & "Students 1: " & _
        student1.FirstName & " " & student1.LastName & _
        vbCrLf & "Student 2: " & student2.FirstName & " " & _
        student2.LastName)
     " mark student1 and student2 for garbage collection
     student1 = Nothing
     student2 = Nothing
     System.GC.Collect() " request garbage collection
     
   End Sub

End Class " Class Student uses Shared variable. Class Student

  Inherits Object
  Private mFirstName As String
  Private mLastName As String
  " number of objects in memory
  Private Shared mCount As Integer
  " Student constructor
  Public Sub New(ByVal firstNameValue As String, _
     ByVal lastNameValue As String)
     mFirstName = firstNameValue
     mLastName = lastNameValue
     mCount += 1 " increment shared count of students
     Console.WriteLine _
        ("Student object constructor: " & mFirstName & _
        " " & mLastName)
  End Sub " New
  " finalizer method decrements Shared count of students
  Protected Overrides Sub Finalize()
     mCount -= 1 " decrement mCount, resulting in one fewer object
     Console.WriteLine _
        ("Student object finalizer: " & mFirstName & _
        " " & mLastName & "; count = " & mCount)
  End Sub " Finalize
  " return first name
  Public ReadOnly Property FirstName() As String
     Get
        Return mFirstName
     End Get
  End Property " FirstName
  " return last name
  Public ReadOnly Property LastName() As String
     Get
        Return mLastName
     End Get
  End Property " LastName
  " property Count
  Public Shared ReadOnly Property Count() As Integer
     Get
        Return mCount
     End Get
  End Property " Count

End Class " Student


 </source>