是我在使用tabe控件的时候遇到的问题 (可能我太蠢,这根本不是问题)用DataReader对象输出表格到table控件上dim row as tablerow
dim cell as tablecell
while rd.read()             'rd是DataReader对象  
row=new TableRow            ’这里创建多次tablerow对象
For i=0 to rd.FieldCount-1
    cell=new TableCell      ’ 这里创建多次TableCell对象
    cell.text=rd.Item(i)
    row.cells.add(cell)
Next
end while代码如上 两成循环不断的创建 我在学Java的时候没记错的话  new 会创建一个内存空间给 变量,然后我们要为他赋值就通过变量找到内存地址并放数据。
在这个程序里用同一个变量名多次调用new来创建内存空间(cell=new TableCell;row=new TableRow )而其实每个创建的内存空间仅仅在自己循环里是有用的,到了下一个循环的时候就会成为无用数据,更可怕的是对象的变量只有一个,它只会指向最后创建的对象的内存空间,而无法指向之前创建的对象的内存空间,导致大量内存的消耗,我不知道我的这种理解对不对。
当然asp.net在用同一个变量再用new来创建新对象的时候是自动清除之前的对象控件中的内容。那我的猜想就有点太无知可笑了,也不存在我的这种理解。不知道大家的观点是怎样的?

解决方案 »

  1.   

    不用过分担心,java和.net都是用的垃圾回收机制,不用的内存会自动释放的。
    当然如果逻辑上不需要多次分配的地方,还是节约为好,比如上面的代码,如果row只是在循环中使用(而不需要加到table中的话),那就可以在循环之前用new创建实例,每次循环开始清除row中的cell,像这样:
    dim row as tablerow
    dim cell as tablecell
    row=new TableRow            ’这里创建单个tablerow对象
    while rd.read()            'rd是DataReader对象 
    row.Cells.Clear()
    For i=0 to rd.FieldCount-1
        cell=new TableCell      ’ 这里创建多次TableCell对象
        cell.text=rd.Item(i)
        row.cells.add(cell)
    Next
    end while 
    这样写法是和你的代码等价的(不过好像是无用功,因为row的内容每次都被清空,而不会加到table中)