我做了一个画图软件,先截取当前桌面信息,作为原图,在对其进行操作,不做存盘。操作完成后,窗口关闭,但是内存资源没有释放,而起在操作过程中内存占用率特别高。不知这两个问题如何解决,望高手帮忙。解决后立即给分

解决方案 »

  1.   

    最讨厌.Net的内存管理,说什么没有引用后会自动清理,我等的3个小时,站用的内存还是不减少。
    GC好象也不能清掉
    关注ing!
      

  2.   

    .Net的内存管理是不能管理非托管资源的。你需要自己释放的。
      

  3.   

    怀疑这种资源是非托管的。非托管对象应该用
    System.Runtime.InteropServices.Marshal.ReleaseComObject
    释放。
      

  4.   

    使用System.GC.Collect()函数,进行垃圾回收
      

  5.   

    将你操作的图片保存在一个 Image 对象中,退出之前调用 Dispose() 释放掉。
    内存占用高可以考虑使用缓存机制(如保存临时图片文件等),或者改进画图算法。____________________________________因为学无止境 所以要与时俱进
    该贴是通过 CSDN 小助手 V2.5 发表/回复的。CSDN 小助手是一款脱离浏览器也可以访问 Csdn 论坛的软件。
    发布日期:2005年11月05日发布
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2____________________________________
      

  6.   

    非托管的资源要调用它包装类的dispose啊,这个模式专门解决这类问题的~~~~~~~~~
      

  7.   

    to 我做了一个画图软件,先截取当前桌面信息,作为原图,在对其进行操作,不做存盘。
    操作完成后,窗口关闭,但是内存资源没有释放,而起在操作过程中内存占用率特别高。截取当前桌面信息?
    是否产生了hdc,如果产生了,则需要进行释放,释放的方法有:
    如果是通过Graphics产生的,需要调用Graphics.ReleaseHdc来释放;
    如果是通过GetHdc系统api产生的,则需要调用ReleaseHdc系统api来释放。
      

  8.   

    问题找到了,是屏幕COPY的问题,不知道进行屏幕COPY所占用的内存怎样释放?
      

  9.   

    to 问题找到了,是屏幕COPY的问题,不知道进行屏幕COPY所占用的内存怎样释放?Call "BitBlt" api function to copy image from one hdc to another hdc?You should check as follows:
    是否产生了hdc,如果产生了,则需要进行释放,释放的方法有:
    如果是通过Graphics产生的,需要调用Graphics.ReleaseHdc来释放;
    如果是通过GetHdc系统api产生的,则需要调用ReleaseHdc系统api来释放。
      

  10.   

    private Bitmap screen_capture()
    {
    Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
    Screen.PrimaryScreen.Bounds.Height) ;
    Graphics g = Graphics.FromImage(bmp) ;IntPtr src_hWnd = IntPtr.Zero ;             
    IntPtr srcHDC   = USER32.GetDC(src_hWnd) ; 
    IntPtr dstHDC   = g.GetHdc() ;             
    GDI32.BitBlt(dstHDC, 0, 0, bmp.Width, bmp.Height,srcHDC, 0, 0,  GDI32.SRCCOPY) ;                      
    g.ReleaseHdc(dstHDC) ;
    USER32.ReleaseDC(src_hWnd, srcHDC) ;return bmp ;
    }
      

  11.   

    以上是SOURCE,应该是有释放的
      

  12.   

    代码没有错,照理应该释放了,不过你的bmp还在使用,那么它所占的内存是不可能释放的。
      

  13.   

    我将bmp作为了form的背景,怎么释放?