0

请看一下我从MSDN 网站获取的以下代码:

Sub Page_Load(sender As Object, e As EventArgs)
    ' Generate rows and cells.           
    Dim numrows As Integer = 3
    Dim numcells As Integer = 2
    Dim j As Integer
    For j = 0 To numrows - 1
        Dim r As New TableRow()
        Dim i As Integer
        For i = 0 To numcells - 1
            Dim c As New TableCell()
            c.Controls.Add(New LiteralControl("row " & j.ToString() & ", cell " & i.ToString()))
            r.Cells.Add(c)
        Next i
        Table1.Rows.Add(r)
    Next j
End Sub 'Page_Load

每行都有一个新的 TableRow 实例,并为每个表格单元格创建了一个新的 TableCell 实例。我对此有两个问题:

  1. 这些实例是如何被销毁的?即c = Nothing。肯定有内存泄漏?
  2. Table 类如何知道TableRowand的实例在哪里TableCell?我问的原因是因为您似乎无法TableCell为多个表格单元格和TableRow多个表格行重用实例,即您不能执行以下操作:

    Dim objTable As New Table
    Dim objTableRow As New TableRow
    Dim objTableCell As New TableCell
    
    objTableCell.Text = "Test Row 1 Cell 1"
    objTableRow.Cells.Add(objTableCell)
    objTableCell.Text = "Test Row 1 Cell 2"
    objTableRow.Cells.Add(objTableCell)
    objTable.Rows.Add(objTableRow)
    
    objTableCell.Text = "Test Row 2 Cell 1"
    objTableRow.Cells.Add(objTableCell)
    objTableCell.Text = "Test Row 2 Cell 2"
    objTableRow.Cells.Add(objTableCell)
    objTable.Rows.Add(objTableRow)
    
    objTableCell.Text = "Test Row 3 Cell 1"
    objTableRow.Cells.Add(objTableCell)
    objTableCell.Text = "Test Row 3 Cell 2"
    objTableRow.Cells.Add(objTableCell)
    objTable.Rows.Add(objTableRow)
    
4

1 回答 1

0

.NET 有一个垃圾收集器,可以为您释放内存。

.NET Framework 的垃圾收集器管理应用程序的内存分配和释放。每次创建新对象时,公共语言运行库都会从托管堆中为该对象分配内存。只要托管堆中有可用的地址空间,运行时就会继续为新对象分配空间。然而,记忆不是无限的。最终,垃圾收集器必须执行收集以释放一些内存。垃圾收集器的优化引擎根据正在进行的分配确定执行收集的最佳时间。当垃圾收集器执行收集时,它会检查托管堆中不再被应用程序使用的对象,并执行必要的操作来回收它们的内存。

如果需要立即释放内存(比如有数据库连接),可以 Dispose ,只要实现IDisposable.

该接口的主要用途是释放非托管资源。当不再使用该对象时,垃圾收集器会自动释放分配给托管对象的内存。但是,无法预测垃圾收集何时发生。此外,垃圾收集器不了解非托管资源,例如窗口句柄或打开的文件和流。

使用此接口的 Dispose 方法与垃圾收集器一起显式释放非托管资源。当不再需要对象时,对象的使用者可以调用此方法。

于 2012-06-13T13:19:57.130 回答