C# FormHbitmap OutofMemoryException(内存溢出)解决方案
来源:互联网 发布:mac上迅雷下载不了 编辑:程序博客网 时间:2024/05/17 08:51
最近写了一个基于图象识别的监控软件。
先贴截图部分代码:
public Bitmap getPicture(Rectangle nrect) { IntPtr hscrdc = Win32API.GetWindowDC(WXConstants.HANDLE_MAIN_FORM_WINDOW); DllOperationDelegations.RECT rect; Win32API.GetWindowRect(WXConstants.HANDLE_MAIN_FORM_WINDOW, out rect); IntPtr hbitmap = Win32API.CreateCompatibleBitmap(hscrdc, (int)(rect.Right + 10 - rect.Left), (int)(rect.Bottom + 10 - rect.Top)); IntPtr hmemdc = Win32API.CreateCompatibleDC(hscrdc); Win32API.SelectObject(hmemdc, hbitmap); Win32API.PrintWindow(WXConstants.HANDLE_MAIN_FORM_WINDOW, hmemdc, 0); Bitmap bmp; bmp = Bitmap.FromHbitmap(hbitmap); Win32API.DeleteDC(hscrdc); Win32API.DeleteDC(hmemdc); Win32API.DeleteObject(hbitmap); Bitmap b = new Bitmap(nrect.Width, nrect.Height, PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(b); g.DrawImage(bmp, 0, 0, nrect, GraphicsUnit.Pixel); g.Dispose(); return b; }
技术很渣,也没测内存,结果在用户那边一跑,几十分钟就抛内存溢出,汗死
网上查了查,包括微软官网,都推荐用GDIDeleteObject()方法,不过释放与不释放,差别不是很明显,虽然性能提升50%。不过内存曲线还是快速攀升。
最后终于查到,截图之后,可以内存强制释放一次
GC.Collect();内存溢出就解决了。CPU消耗也不是很高。
感觉这不是最好的方法,若有高人,请指点~~~~
0 0
- C# FormHbitmap OutofMemoryException(内存溢出)解决方案
- HttpWebRequest内存溢出 OutOfMemoryException
- C#打开tif文件时内存溢出(System.OutOfMemoryException)解决办法
- .Net 内存溢出(System.OutOfMemoryException
- (待解决)XNA “System.OutOfMemoryException” 内存溢出?
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
- OOM(内存溢出)解决方案
- iis应用程序池 内存溢出错误 System.OutOfMemoryException
- 解决Android加载大图片内存溢出的问题(OutofMemoryException)
- 解决Android加载大图片内存溢出的问题(OutofMemoryException)
- 引发类型为“System.OutOfMemoryException”的异常-.Net 内存溢出
- Android 内存溢出解决方案(OOM)
- Android 内存溢出解决方案(OOM)
- Android 内存溢出(OOM)解决方案总结
- Android 内存溢出解决方案(OOM)
- 如何计算自己的带宽
- 如何解决mysqld dead but subsys locked
- Android 动画效果(三):overridePendingTransition(界面切换动画)与LayoutTransition(布局动画)
- 总结
- unity3d实现动态显示伤害值
- C# FormHbitmap OutofMemoryException(内存溢出)解决方案
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- C++字符串知识总结
- 在错误中成长——今目标反思
- 单例模式(线程安全考虑)
- 静态成员与静态成员函数
- 第三周项目4 顺序表应用(2)
- 基于Docker部署codis
- Android onTouchEvent和setOnTouchListener中onTouch的区别