我用c#做了个winform客户端程序左侧为treeview右侧为listview控件类似于windows explorer采用webservice做了orm来提供数据开始运行起来需要56m但是随着左侧不断的导航数据内存就显著的上升如果每次提取100条数据的话提取2次内存就会增加10m以上非常可怕,我试图在每次提取之后回收内存写法如下:System.GC.Collect();System.GC.WaitForPendingFinalizers();System.GC.Collect();但是依然无济于事.本人的机器内存是1g的无论我怎样运行只有程序开的虚拟内存超过系统内存底线时才会启动垃圾回收但是效果仍然不会很明显;我在256m的内存机器上试验过我的程序的内存超过200m后会启动垃圾回收但是这时系统已经慢的无法忍受了。请高手给以解决方案!看来ms的GC也只是在欺骗用户而已除了ms自己没有人能够控制的很好(他自己的visual s系列的集成编辑器最高也不过占用100多m而已)我个人看法ms的垃圾回收机制只有在垃圾把自己埋了才会起一点点作用吧!哈哈

解决方案 »

  1.   

    哈哈,本人提取数据的方法是用webservice和客户端的内存应该没有什么关系吧ws返回的是IList类型的列表我只是用listView1.Items.Clear();foreach(DataType item in list){ListViewItem lvtItem = new ListViewItem();lvtItem.Text = item.Name;lvtItem.Tag = item;}
      

  2.   

    我的问题是我每次加载前都调用了listView1.Items.Clear();加载后都调用了GC来回收内存但是内存每次都会上涨该释放的内存并没有释放?why?
      

  3.   

    我的方法是,变量用完,立刻设为nothing================================================================
    此帖通过csdn小助手回复。CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
    脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
    快,产生的流量更小。  下载地址:http://qqwwee.com/csdn.rar
    这个软件真的很好,速度很快,推荐大家使用!没有下载的可以给我发邮件
    [email protected] 声明我和作者素不相识。
    ================================================================
      

  4.   

    偶可能会,但是我不是.net版主,所以还是不能解决
      

  5.   

    System.GC.Collect()会对整个程序进行强制垃圾回收,你那么频繁调用本身就影响性能。ms的程序一旦最小化就会释放大量内存。当然还原以后也会再次占用内存,这和ms处理内存的方式有关。256m内存用于.net编程、测试实在太寒碜了点。
      

  6.   

    我这边单开一个默认的WINFORM,什么代码都不输入,启动时候都要15MB的内存,呵呵。
      

  7.   

    用托管语言写的Winform程序只要有一点业务逻辑内存就有可能上升到几十兆这个并不奇怪;至于你们说的用完变量就置为null这个肯定是会这样做的;还有人说的最小化问题其实ms的windows最小化时并没有使程序开的虚拟内存减少只是将当前资源集中到了其他活动窗口上去了请在taskmanager中“查看”菜单中加“虚拟内存”一项一看便知!啊到底csdn里有没有高手啊。
      

  8.   

    我还要补充的是关于GC的问题我只是做了一个按钮来回收内存然后me手动去点看内存使用是否减少这个对业务性能0影响。
      

  9.   

    1.先把你的内存降为512M。
    2.把那些System.GC.Collect();代码都去掉,应该会好一些。256M太小,1G又太大。
      

  10.   

    我用的机子是2G内存的,底下员工用的基本上都是1G的,我们老板很支持.Net的,听说他和微软那个什么XX很铁的说。
      

  11.   

    to MarlboroXP:1G内存算什么?我现在碰到的问题是, 顾户要将工人信息(工人名, 工人照片)等, 一次打印出来.一张图片就是500K, 有几百张图片, 一次打印的话,花了1G多, 都没反应现想办法解决中, 分次打印又不会, 唉
      

  12.   

    to MarlboroXP:1G内存算什么?我现在碰到的问题是, 顾户要将工人信息(工人名, 工人照片)等, 一次打印出来.一张图片就是500K, 有几百张图片, 一次打印的话,花了1G多, 都没反应现想办法解决中, 分次打印又不会, 唉-------------------------
    可尝试多线程控制。将work thread 与 UI thread 分开
      

  13.   

    应该是你的程序问题,winform耗内存一般的程序在30M左右加载的时候高很正常,但加载完毕后没有下降,就不正常了还是研究一下你的代码