to 我做了一个画图软件,先截取当前桌面信息,作为原图,在对其进行操作,不做存盘。 操作完成后,窗口关闭,但是内存资源没有释放,而起在操作过程中内存占用率特别高。截取当前桌面信息? 是否产生了hdc,如果产生了,则需要进行释放,释放的方法有: 如果是通过Graphics产生的,需要调用Graphics.ReleaseHdc来释放; 如果是通过GetHdc系统api产生的,则需要调用ReleaseHdc系统api来释放。
问题找到了,是屏幕COPY的问题,不知道进行屏幕COPY所占用的内存怎样释放?
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来释放。
GC好象也不能清掉
关注ing!
System.Runtime.InteropServices.Marshal.ReleaseComObject
释放。
内存占用高可以考虑使用缓存机制(如保存临时图片文件等),或者改进画图算法。____________________________________因为学无止境 所以要与时俱进
该贴是通过 CSDN 小助手 V2.5 发表/回复的。CSDN 小助手是一款脱离浏览器也可以访问 Csdn 论坛的软件。
发布日期:2005年11月05日发布
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2____________________________________
操作完成后,窗口关闭,但是内存资源没有释放,而起在操作过程中内存占用率特别高。截取当前桌面信息?
是否产生了hdc,如果产生了,则需要进行释放,释放的方法有:
如果是通过Graphics产生的,需要调用Graphics.ReleaseHdc来释放;
如果是通过GetHdc系统api产生的,则需要调用ReleaseHdc系统api来释放。
是否产生了hdc,如果产生了,则需要进行释放,释放的方法有:
如果是通过Graphics产生的,需要调用Graphics.ReleaseHdc来释放;
如果是通过GetHdc系统api产生的,则需要调用ReleaseHdc系统api来释放。
{
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 ;
}