请查看下面的代码,该代码来自MSDN website:
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实例。我有两个问题:
c = Nothing
。肯定有内存泄漏? Table类如何知道TableRow
和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)
答案 0 :(得分:0)
.NET有Garbage Collector为您释放内存。
.NET Framework的垃圾收集器管理分配和 为您的应用程序释放内存。每次创建新的 对象,公共语言运行库为对象分配内存 来自托管堆。只要地址空间可用 托管堆,运行时继续为新对象分配空间。 但是,记忆并不是无限的。最终垃圾收集器必须 执行一个集合,以释放一些记忆。垃圾 收集器的优化引擎确定执行a的最佳时间 集合,基于正在进行的分配。当垃圾 collector执行集合,它检查托管中的对象 应用程序不再使用的堆并执行 必要的操作来回收他们的记忆。
如果您需要立即释放内存(例如使用数据库连接),只要它们实现IDisposable
,您就可以处置它们。
此接口的主要用途是释放非托管资源。 垃圾收集器自动释放分配给的内存 不再使用该对象时的托管对象。但事实并非如此 可以预测何时会发生垃圾收集。此外, 垃圾收集器不了解非托管资源,例如 窗口句柄,或打开文件和流。
使用此接口的Dispose方法显式释放 与垃圾收集器一起使用的非托管资源。该 当对象为no时,对象的使用者可以调用此方法 需要更长时间。