在循环中调用Drawimage方法,进行图像的拼接,内存上涨很快,请问什么原因啊
------解决思路----------------------
图像资源没有释放吧
非托管资源需要手动执行
对象.Dispose()
------解决思路----------------------
你拼命的画,又没有Dispose当然溢出了。
------解决思路----------------------
用using语句块啊
using(Graphic g = CreateGraphic)
{
//出了语句块自动Dispose
}
------解决思路----------------------
此外,不要看到内存上升就说什么"内存泄露"
你要看内存是否上升之后会稳定在某个值,或者有时升上去,过一段时间又降下来
你一下申请那么多内存用来画图,内存必然会上升的,而且很可能不会马上降下来(即使已经释放资源)
你只要确保它不会一直上升一直到内存不足就行了
------解决思路----------------------
来看拉圾回收来不及回收了。
------解决思路----------------------
在while?加个Thread.Sleep(10)
------解决思路----------------------
你一张图片大小有10个G?
还是说这个函数你反复执行了许多次之后,内存才达到14G的?
------解决思路----------------------
PrintWindow(hwnd, hdc, 0);里又干啥了
------解决思路----------------------
你把Dispose放循环里啊亲。。。
------解决思路----------------------
啊 看差大括号了
你找找调用的方法中,有没有new出来对象的,那种也释放掉
------解决思路----------------------
g2.DrawImage,你最终把图像画到哪里去了?
g2不过是画图用的工具,它本身不是图像
图像对象呢(比如Image还是bmp)?释放了吗
------解决思路----------------------
难道写代码 非得在一个过程里面写完,可以分成好几个小的模块去写呀。
------解决思路----------------------
眼晕!好多Dispose和=null
建议你不要定义成全局变量然后在循环里反复使用
在循环里定义,用using包起来,这样不需要手动去释放,也不会不小心漏掉了某个变量的释放代码
更不会因为执行过程中出错而不执行释放的代码
finally是对应try的
只有在try里出错时,finally不管是否出错都会执行
而如果在执行try之前就已经出错,那么finally也不会执行
------解决思路----------------------
工程属性->代码分析->启用
选所有规则,编译
其中一条检查,凡是可以Dispose的,你没有Dispose就会有一条提示。先利用这个排查一下吧