我现在在开发一个电子地图程序,当图层不断切换时现象如下:
内存到一定时候会自动降下来 
虚拟内存就一直上涨  I/O读取很多 
一般要2到3个小时才会抛异常 
错误提示是“创建窗口句柄时出错” 电子地图实现的原理是先加载图片,在图片上创建Panel实现图层上某点的显示。
以上资源已在图层切换时用dispose进行释放。
但效果不佳。那位高手帮忙指点一下呀

解决方案 »

  1.   

    内存的回收永远都是垃圾回收器收集,dispose并没有释放内存!
    是不是应该把new出来得对象显示的置为NULL呢.这样也许会好点
    建议!!
      

  2.   

    同时加上些GC.Collect();效果会更好些。。
      

  3.   

    将new出来的对象置为null有什么意义
      

  4.   

    垃圾回收器就那么不管用吗? 它可是.net的一大卖点.
    一般C#程序是不需要考虑这些个问题的.MSDN不推荐显示调用GC.Collect().也许真是非托管代码的错.
      

  5.   

    谢谢各位出谋划策!!!
    我查过相关资料,“托管资源是指由CLR管理分配和释放的资源,一般是托管内存,而非托管资源是由系统分配和释放的资源 
    一般地在CLR里new 一个对象或者分配一个数组都不需要手动去释放内存, 而如windows里的句柄资源常常需要手动释放,如字体、刷子、DC等”
    对于我说的图片处理应该属于非托管资源,对于NEW出来的对象应该是托管资源,系统可以自己回收的。我在每次图层切换前也将对象置Null,也试过GC.Collect(). 没啥效果。
      

  6.   

    是不是调用了其他非托管代码的dll了,比如C++写的,检查一下这些代码是不是有地方没释放资源。
      

  7.   

    文件处理本身就是非托管的呀 好像并没有调用其他非托管代码的DLL 
    昨天发现图片切换太快,可能出现加载异常,异常时并未进行资源释放。今天再跟一下。