请看下面的代码,这是我从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实例。我对此有两个问题:
c = Nothing.肯定有记忆泄露?TableRow和TableCell的实例在哪里?我问您的原因是,您似乎不能对多个表单元格重用TableCell实例,对于多个表行重用TableRow实例,即不能这样做:
Dim objTable As New TableRow 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 Cell2 Cell2”objTableRow.Cells.Add(objTableCell) (#en20 20= "Test Row 3 Cell 1“)objTableRow.Cells.Add(objTableCell) objTableCell.Text =“测试行3单元2”objTableRow.Cells.Add(objTableCell) objTable.Rows.Add(objTableRow)发布于 2012-06-13 13:19:57
.NET有一个为您释放内存的垃圾收集器。
.NET框架的垃圾收集器管理应用程序的内存分配和释放。每次创建新对象时,公共语言运行库都会从托管堆中为对象分配内存。只要托管堆中有可用的地址空间,运行库就会继续为新对象分配空间。然而,记忆不是无限的。最后,垃圾收集器必须执行一个回收,以便释放一些内存。垃圾收集器的优化引擎根据正在进行的分配确定执行回收的最佳时间。当垃圾收集器执行回收时,它会检查托管堆中不再被应用程序使用的对象,并执行必要的操作来回收它们的内存。
如果您需要立即释放内存(例如使用数据库连接),那么只要它们实现IDisposable,就可以释放它们。
这个接口的主要用途是释放非托管资源。当不再使用托管对象时,垃圾收集器会自动释放分配给托管对象的内存。但是,无法预测垃圾回收何时会发生。此外,垃圾收集器不知道诸如窗口句柄或打开的文件和流等非托管资源。 使用此接口的Dispose方法可以显式地与垃圾收集器一起释放非托管资源。当对象不再需要时,对象的使用者可以调用此方法。
https://stackoverflow.com/questions/11015704
复制相似问题