C# WinForm中,如何清空ListBox并重新从数据库载入数据?

C# WinForm中,如何清空ListBox并重新从数据库载入数据?,第1张

调试后你会发现,你的dataset数据增加了。那个ds的变量就是DataSet对象。一看就知道是在loadinfo()函数外面声明的了。作为全局变量,每次刷新都会运行这个函数,那么ds也每次都增加。你应该把ds声明在loadinfo里面。这样就每次是声明新的dataset,数据也就跟数据库里面的一样了。

listclear()底层源码实现
在使用list 结合的时候习惯了 list=null ;在创建这样的方式,但是发现使用list的clear 方法很不错,尤其是有大量循环的时候
1、list 接口 的ArrayList 类的clear() 方法源码
如下:
/
Removes all of the elements from this list The list will
be empty after this call returns
/
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
我们从中可以发现就是将list集合中的所有对象都释放了,而且集合也都空了,所以我们没必要多次创建list 集合而只需要调用一下 clear() 方法就可以了。
2、list 接口 的LinkedList类的clear() 方法源码
如下:
public void clear() {
// Clearing all of the links between nodes is "unnecessary", but:
// - helps a generational GC if the discarded nodes inhabit
// more than one generation
// - is sure to free memory even if there is a reachable Iterator
for (Node<E> x = first; x != null; ) {
Node<E> next = xnext;
xitem = null;
xnext = null;
xprev = null;
x = next;
}
first = last = null;
size = 0;
modCount++;
}
从上面我们可以看到,不管是哪个实现类的clear 方式都是将里面的所有元素都释放了并且清空里面的属性 ,这样我们就不用在释放 创建新对象来保存内容而是可以直接将现有的集合制空再次使用。
二 listclear()与list = null 区别
java中list集合通过clear()方法清空,只会将list中的对象变成垃圾回收清空,但是list对象还是存在。
但是通过list=null后,不仅列表中的对象变成了垃圾,为列表分配的空间也会回收,什么都不做与赋值NULL一样,说明直到程序结束也用不上列表list了,它自然就成为垃圾了clear()只是清除了对象的引用,使那些对象成为垃圾


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13391576.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存