运行程序,内存使用量急增,最后程序死掉,求解决方案.解决思路

运行程序,内存使用量急增,最后程序死掉,求解决方案.
程序中使用ReportViewer控件,做报表预览,打印.
假设FormA有一个button,点之后调用ClassB,ClassB里使用ReportViewer生成报表打印预览.
现在是,预览一生成出来,内存使用量非常高,句柄数和GDI对象数也会增加,
把预览页关闭,内存,句柄数和GDI对象数基本上不下降,更别说回复到打开之前的水平了.
现在出现的现象就是,点BUTTON,打开预览,关闭,再点button打开,再关闭,
如此反复几次,程序死掉了.
请问,这个是什么原因,有解决方案吗?
还有一个比较有趣的现象,如果是在DEBUG状态下,不会出现死掉的现象,
虽然内存什么的一样居高不下.

首次打开预览页前,内存使用情况为40000K所有,
预览后,达到70000K,之后每次预览都会增加2000-3000K,
直到死掉.

------解决方案--------------------
典型的内存泄露,内存没有回收

在性能监视器中看看这两个计数器 #bytes in all heaps,以及进程的private bytes

每点击一次,查看一下计数器,如果持续增加的话,基本可以确定是内存泄露,需要检查并修改代码,以及时释放资源
------解决方案--------------------
检查预览部分以及在整个模块级使用的所有缓冲区,看是不是只有分配,没有释放语句,
DEBUG状态下不死大概因为你的硬盘空间还没被“虚拟”完
------解决方案--------------------
那说明你创建的ReportViewer对象没有回收,试着每次使用完调用dispose(),设置对象为null,然后强制GC.collect()再运行看计数器是否还是一直增长,如果是,说明这些对象被root,也就是所谓的根对象,那就需要检查代码为什么对象被root,通常是因为使用了静态变量和缓存