<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FDevelopment%2FGarbage_Collection</id>
		<title>VB.Net/Development/Garbage Collection - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FDevelopment%2FGarbage_Collection"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Development/Garbage_Collection&amp;action=history"/>
		<updated>2026-04-05T11:59:07Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Development/Garbage_Collection&amp;diff=760&amp;oldid=prev</id>
		<title> в 16:40, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Development/Garbage_Collection&amp;diff=760&amp;oldid=prev"/>
				<updated>2010-05-26T16:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:40, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Development/Garbage_Collection&amp;diff=761&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Development/Garbage_Collection&amp;diff=761&amp;oldid=prev"/>
				<updated>2010-05-26T12:45:01Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Force a garbage collect==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Imports System.Data&lt;br /&gt;
Imports System.IO&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Imports System.Drawing.Printing&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main()&lt;br /&gt;
      Dim o As MyObject = New MyObject&lt;br /&gt;
      &lt;br /&gt;
      o = Nothing&lt;br /&gt;
      GC.Collect()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class MyObject&lt;br /&gt;
    &amp;quot; Constructor - called when the object is started...&lt;br /&gt;
    Public Sub New()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Object &amp;quot; &amp;amp; GetHashCode() &amp;amp; &amp;quot; created.&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
    &amp;quot; Finalize - called when the object is removed from memory...&lt;br /&gt;
    Protected Overrides Sub Finalize()&lt;br /&gt;
        MyBase.Finalize()&lt;br /&gt;
        &amp;quot; tell the user we&amp;quot;ve deleted...&lt;br /&gt;
        Console.WriteLine(&amp;quot;Object &amp;quot; &amp;amp; GetHashCode() &amp;amp; &amp;quot; finalized.&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Force Garbage Collection==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System.IO&lt;br /&gt;
Module Module1&lt;br /&gt;
    Sub Main()&lt;br /&gt;
        Dim c1 As New Contact(&amp;quot;Name 1&amp;quot;, &amp;quot;111-555-1111&amp;quot;, &amp;quot;1@1.ru&amp;quot;)&lt;br /&gt;
        Dim c2 As New Contact(&amp;quot;Name 2&amp;quot;, &amp;quot;222-555-1212&amp;quot;, &amp;quot;2@2.ru&amp;quot;)&lt;br /&gt;
        Dim c3 As New Contact(&amp;quot;Name 3&amp;quot;, &amp;quot;333-555-1212&amp;quot;, &amp;quot;3@3.ru&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        c1 = Nothing &amp;quot; Discard the object&lt;br /&gt;
        GC.Collect()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Back from first collection&amp;quot;)&lt;br /&gt;
        c3 = Nothing &amp;quot; Discard the object&lt;br /&gt;
        GC.Collect()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Back from second collection -- Press Enter&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    End Sub&lt;br /&gt;
End Module&lt;br /&gt;
    Class Contact&lt;br /&gt;
        Public Name As String&lt;br /&gt;
        Public Phone As String&lt;br /&gt;
        Public EMail As String&lt;br /&gt;
        Sub New(ByVal ContactName As String, ByVal ContactPhone As String, ByVal ContactEmail As String)&lt;br /&gt;
            Console.WriteLine(&amp;quot;Name: &amp;quot; &amp;amp; ContactName &amp;amp; &amp;quot; Phone &amp;quot; &amp;amp; ContactPhone &amp;amp; &amp;quot; Email &amp;quot; &amp;amp; ContactEmail)&lt;br /&gt;
            Name = ContactName&lt;br /&gt;
            Phone = ContactPhone&lt;br /&gt;
            EMail = ContactEmail&lt;br /&gt;
        End Sub&lt;br /&gt;
        Protected Overrides Sub Finalize()&lt;br /&gt;
            Console.WriteLine(&amp;quot;In Finalize for &amp;quot; &amp;amp; Name)&lt;br /&gt;
        End Sub&lt;br /&gt;
    End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Garbage collection started==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    &lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
        Dim myform As New Form1()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
  &lt;br /&gt;
Public Class Form1&lt;br /&gt;
    Public Running As Boolean&lt;br /&gt;
    Private Class Junk&lt;br /&gt;
        Public MyForm As Form1&lt;br /&gt;
        Public Sub New(ByVal my_form As Form1)&lt;br /&gt;
            MyForm = my_form&lt;br /&gt;
        End Sub&lt;br /&gt;
        &amp;quot; Garbage collection started.&lt;br /&gt;
        Protected Overrides Sub Finalize()&lt;br /&gt;
            &amp;quot; Stop making objects.&lt;br /&gt;
            MyForm.Running = False&lt;br /&gt;
        End Sub&lt;br /&gt;
    End Class&lt;br /&gt;
    Public Sub New()&lt;br /&gt;
        Running = True&lt;br /&gt;
        Dim new_obj As Junk&lt;br /&gt;
        Dim max_i As Long&lt;br /&gt;
        For i As Long = 1 To 100000&lt;br /&gt;
            new_obj = New Junk(Me)&lt;br /&gt;
            If Not Running Then&lt;br /&gt;
                max_i = i&lt;br /&gt;
                Exit For&lt;br /&gt;
            End If&lt;br /&gt;
        Next i&lt;br /&gt;
        Console.WriteLine(&amp;quot;Allocated &amp;quot; &amp;amp; max_i.ToString &amp;amp; &amp;quot; objects&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GC Suppress Finalize me==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Drawing&lt;br /&gt;
Imports System.Data&lt;br /&gt;
Imports System.IO&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
Imports System.Windows.Forms&lt;br /&gt;
Imports System.Drawing.Printing&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main()&lt;br /&gt;
        Dim file As New MyFile(&amp;quot;c:\FinalizeDemo.txt&amp;quot;)&lt;br /&gt;
        &amp;quot; now, clear the reference to the object...&lt;br /&gt;
        file.Dispose()&lt;br /&gt;
        file = Nothing&lt;br /&gt;
        &amp;quot; wait for the user to press return...&lt;br /&gt;
        Console.WriteLine(&amp;quot;Press Return to collect the garbage...&amp;quot;)&lt;br /&gt;
        &amp;quot; force a collect...&lt;br /&gt;
        GC.Collect()&lt;br /&gt;
        &amp;quot; wait for the user to quit...&lt;br /&gt;
        Console.WriteLine(&amp;quot;Press Return to quit...&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class MyFile&lt;br /&gt;
    Implements IDisposable&lt;br /&gt;
    Private stream As FileStream&lt;br /&gt;
    Private isDisposed As Boolean&lt;br /&gt;
&lt;br /&gt;
    Public Sub New(ByVal filename As String)&lt;br /&gt;
        stream = New FileStream(&amp;quot;test.txt&amp;quot;, FileMode.OpenOrCreate)&lt;br /&gt;
        Console.WriteLine(&amp;quot;Object &amp;quot; &amp;amp; GetHashCode() &amp;amp; &amp;quot; created.&amp;quot;)&lt;br /&gt;
        Console.WriteLine(&amp;quot;Using file: &amp;quot; &amp;amp; filename)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Sub Dispose() Implements System.IDisposable.Dispose&lt;br /&gt;
        If isDisposed = True Then Return&lt;br /&gt;
        &lt;br /&gt;
        stream.Close()&lt;br /&gt;
        stream = Nothing&lt;br /&gt;
        isDisposed = True&lt;br /&gt;
        GC.SuppressFinalize(Me)&lt;br /&gt;
        Console.WriteLine(&amp;quot;Object &amp;quot; &amp;amp; GetHashCode() &amp;amp; &amp;quot; disposed.&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Protected Overrides Sub Finalize()&lt;br /&gt;
        Dispose()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Object &amp;quot; &amp;amp; GetHashCode() &amp;amp; &amp;quot; finalized.&amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Get GC generation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Module Module1&lt;br /&gt;
    Sub Main()&lt;br /&gt;
        Dim myObject As Object = New Object()&lt;br /&gt;
        Dim i As Integer&lt;br /&gt;
        For i = 0 To 3&lt;br /&gt;
            Console.WriteLine(String.Format(&amp;quot;Generation = {0}&amp;quot;, _&lt;br /&gt;
                              GC.GetGeneration(myObject)))&lt;br /&gt;
            GC.Collect()&lt;br /&gt;
            GC.WaitForPendingFinalizers()&lt;br /&gt;
        Next i&lt;br /&gt;
        Console.Read()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Module&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Generation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Text&lt;br /&gt;
Imports System.Text.RegularExpressions&lt;br /&gt;
&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main(  )&lt;br /&gt;
    Dim myObject As Object = New Object()&lt;br /&gt;
    Dim i As Integer&lt;br /&gt;
    For i = 0 To 3&lt;br /&gt;
      Console.WriteLine(String.Format(&amp;quot;Generation = {0}&amp;quot;, _&lt;br /&gt;
                        GC.GetGeneration(myObject)))&lt;br /&gt;
      GC.Collect()&lt;br /&gt;
      GC.WaitForPendingFinalizers()&lt;br /&gt;
    Next i&lt;br /&gt;
    End Sub &amp;quot;Main&lt;br /&gt;
   &lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Request garbage collection==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
      Console.WriteLine(&amp;quot;Students before instantiation: &amp;quot; &amp;amp; Student.Count)&lt;br /&gt;
      Dim student1 As Student = New Student(&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;)&lt;br /&gt;
      Dim student2 As Student = New Student(&amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;)&lt;br /&gt;
      &amp;quot; output of student2 after instantiation&lt;br /&gt;
      Console.WriteLine(&amp;quot;Students after instantiation: &amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;br /&gt;
         &amp;quot;via Student.Count: &amp;quot; &amp;amp; Student.Count)&lt;br /&gt;
      &amp;quot; display name of first and second student&lt;br /&gt;
      Console.WriteLine(vbCrLf &amp;amp; &amp;quot;Students 1: &amp;quot; &amp;amp; _&lt;br /&gt;
         student1.FirstName &amp;amp; &amp;quot; &amp;quot; &amp;amp; student1.LastName &amp;amp; _&lt;br /&gt;
         vbCrLf &amp;amp; &amp;quot;Student 2: &amp;quot; &amp;amp; student2.FirstName &amp;amp; &amp;quot; &amp;quot; &amp;amp; _&lt;br /&gt;
         student2.LastName)&lt;br /&gt;
      &amp;quot; mark student1 and student2 for garbage collection&lt;br /&gt;
      student1 = Nothing&lt;br /&gt;
      student2 = Nothing&lt;br /&gt;
      System.GC.Collect() &amp;quot; request garbage collection&lt;br /&gt;
      &lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&amp;quot; Class Student uses Shared variable.&lt;br /&gt;
Class Student&lt;br /&gt;
   Inherits Object&lt;br /&gt;
   Private mFirstName As String&lt;br /&gt;
   Private mLastName As String&lt;br /&gt;
   &amp;quot; number of objects in memory&lt;br /&gt;
   Private Shared mCount As Integer&lt;br /&gt;
   &amp;quot; Student constructor&lt;br /&gt;
   Public Sub New(ByVal firstNameValue As String, _&lt;br /&gt;
      ByVal lastNameValue As String)&lt;br /&gt;
      mFirstName = firstNameValue&lt;br /&gt;
      mLastName = lastNameValue&lt;br /&gt;
      mCount += 1 &amp;quot; increment shared count of students&lt;br /&gt;
      Console.WriteLine _&lt;br /&gt;
         (&amp;quot;Student object constructor: &amp;quot; &amp;amp; mFirstName &amp;amp; _&lt;br /&gt;
         &amp;quot; &amp;quot; &amp;amp; mLastName)&lt;br /&gt;
   End Sub &amp;quot; New&lt;br /&gt;
   &amp;quot; finalizer method decrements Shared count of students&lt;br /&gt;
   Protected Overrides Sub Finalize()&lt;br /&gt;
      mCount -= 1 &amp;quot; decrement mCount, resulting in one fewer object&lt;br /&gt;
      Console.WriteLine _&lt;br /&gt;
         (&amp;quot;Student object finalizer: &amp;quot; &amp;amp; mFirstName &amp;amp; _&lt;br /&gt;
         &amp;quot; &amp;quot; &amp;amp; mLastName &amp;amp; &amp;quot;; count = &amp;quot; &amp;amp; mCount)&lt;br /&gt;
   End Sub &amp;quot; Finalize&lt;br /&gt;
   &amp;quot; return first name&lt;br /&gt;
   Public ReadOnly Property FirstName() As String&lt;br /&gt;
      Get&lt;br /&gt;
         Return mFirstName&lt;br /&gt;
      End Get&lt;br /&gt;
   End Property &amp;quot; FirstName&lt;br /&gt;
   &amp;quot; return last name&lt;br /&gt;
   Public ReadOnly Property LastName() As String&lt;br /&gt;
      Get&lt;br /&gt;
         Return mLastName&lt;br /&gt;
      End Get&lt;br /&gt;
   End Property &amp;quot; LastName&lt;br /&gt;
   &amp;quot; property Count&lt;br /&gt;
   Public Shared ReadOnly Property Count() As Integer&lt;br /&gt;
      Get&lt;br /&gt;
         Return mCount&lt;br /&gt;
      End Get&lt;br /&gt;
   End Property &amp;quot; Count&lt;br /&gt;
End Class &amp;quot; Student&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>