我使用wpf写了一个应用程序,有时候会出现内存急剧增加至1G内存,有时候又不会,我想问一下这是不是内存泄露,还是有别的原因。

解决方案 »

  1.   

    不是
    .net不存在内存泄露的问题
      

  2.   


    很有可能是内存泄露,.Net会造成内存泄露。对于在.Net中使用非托管资源要记得及时释放,如果不释放又丢失了对其的引用,就造成内存泄漏,在哪里释放倒不是问题,最好用完就释放。不一定要在用它的类里面释放,在外面也可以释放对于托管资源,.Net的垃圾回收在CLR认为到了应该回收垃圾的时候才进行回收,所以对于托管资源最好的建议也是用完后马上进行垃圾会后。
    比如使用数据库连接,很多新手会:
    SqlConnection conn=.............
    但是一个好的建议是使用using{}块来进行数据访问如:
    using(SqlConnection conn=............){}
    来进行数据访问以使资源会被及时回收。
    造成内存泄露的原因很多,大多是编码问题。自己好好检查一下代码再看看百度LZ应该能自己搞定呵呵
      

  3.   

    如果调用了非托管资源,自然存在泄露的可能。至于您在此之后说的,我不认为应该称作“内存泄露”。
    至于“建议也是用完后马上进行垃圾会后。”
    我认为用Dispose是可行的,主动释放引用。

    GC ..::.Collect 方法   
    强制进行垃圾回收。
    传说中,和我的经验来看,它的效果不怎么样。
      

  4.   

    请问一下什么情况下是使用非托管资源了?
    问题补充:
    还有我的程序是一些播放视频、MP3和进行录音的过程。在这个过程中有时会出现我提出的问题。
    我用ANTS memory profile 查看时 发现 一个byte[]类占用了大量的内存。
      

  5.   

    WPF 存在严重的内存泄露问题!请参考:
    http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx