日期:2014-05-20  浏览次数:21169 次

C# WinForm new对象释放??
程序框架左侧是菜单,右侧显示窗口,点击菜单new对象将Form在右侧panel控件中显示,问题是我点击一次菜单new一次然后在任务管理器中查看内存在增加,点击多次以后程序就断掉,我想问怎么可以释放new对象???还有我程序运行后内存占50M还会慢慢增加怎么进行释放??
------解决方案--------------------
你可以用一个List记录已经打开的窗体,点击时,到List中去找该窗体是否存在,如果存在就直接show,没有在new
------解决方案--------------------
引用:
Quote: 引用:

你可以用一个List记录已经打开的窗体,点击时,到List中去找该窗体是否存在,如果存在就直接show,没有在new

List直接new对象Add存放吗?只有Value没有Key那该怎么判断Form是否存在???

你也可以使用Typeof(Object).FullName 作为key存储 用字典
C# 有GC  你也可以手动回收
------解决方案--------------------
与窗口绑定的事件可能没有释放。
单纯的窗口new一般不会出现这样的问题。

------解决方案--------------------
gc回收时有一个系统调用图。当一个对象的引用还在别的使用里时。是不会被gc回收的。
多用using这个还是比较好的。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你可以用一个List记录已经打开的窗体,点击时,到List中去找该窗体是否存在,如果存在就直接show,没有在new

List直接new对象Add存放吗?只有Value没有Key那该怎么判断Form是否存在???

你也可以使用Typeof(Object).FullName 作为key存储 用字典
C# 有GC  你也可以手动回收

我有一个功能就是在当前页面能修改其他页面的数据,如果将new对象存放到List中那前台显示数据不能及时的更新掉???

对象是引用类型的,倘若A页面简称FA  、B页面简称FB  
FA a=new FA();
FB b=new FB();
dic.add(typeof(FB).FullName,a);
dic.add(typeof(FB).FullName,b);
a.show()

你在A里面写了修改B页面的数据时可以同时更新的,因为你操作还是B窗体,引用类型啊亲

------解决方案--------------------
 调用完之后 this.Dispose();  回收,现在楼主有什么 好想法 ?