Crdown's学习笔记

ASP.NET,Report...

博客园 首页 新随笔 联系 订阅 管理

最近搞水晶报表,发现N多问题,最大问题莫过于并发数量了,在网上查到可以通过修改注册表。VS2005默认为5个并发数量,好像是这样的。

因为我建立了3个报表,当我打开多次后,就出现错误,提示数量受管理员限制。

当你打开这个报表,然后关闭这个报表,那么5个位置,还剩5个位置,除非你5个一起都打开了。

不过一般没人会这么做!

还有一种做法,释放资源!!!!

我建立的程式,只不过有3个报表,为什么还提示呢?不是可以有5个吗?

后来考虑到,原来是我打开报表的时候没有释放掉这个报表使用的资源,所以服务器就认为你还在使用中^_^很郁闷吧&……

怎么解决这个问题呢?OK,我们开始!

在报表页面中,也就是CrystalReportViewer控件所在的页面,当你执行到CrystalReportViewer1.ReportSource =doc;这里时,后面的工作就是释放资源了。

这一句程式,大家应该明白吧?好吧,我贴上来部分代码,看一下。

   //创建报表文档对象
    ReportDocument doc;
    private void initAQXXZBRB()
    {
        //获取报表数据,这里如果不明白,可以看我以前写的关于报表的文章(http://hi.baidu.com/theonlyonelove/blog/item/68c98402f0088b084bfb5183.html
        SqlDataReader dr = AnQuanXinXiGL.getAQXXZBRB(ddlyear.Text, ddlmon.Text, ddlday.Text);
        //创建报表强类型数据集
        AQXXZBRBDS ds = new AQXXZBRBDS();
        //填充数据集
        ds.Load(dr, LoadOption.OverwriteChanges, ds.Tables[0]);
        //实例化报表文档对象
        doc = new ReportDocument();
        //加载报表文件
        doc.Load(Server.MapPath("../ReportFile/AQXXZBRB.rpt"));
        //设置数据源
        doc.SetDataSource(ds.Tables[0]);

        //给予显示控件文档对象
        CrystalReportViewer1.ReportSource = doc;
        //不显示组树
        CrystalReportViewer1.DisplayGroupTree = false;
        //不显示徽标
        CrystalReportViewer1.HasCrystalLogo = false;

        //释放使用的资源
        dr.Close();
        ds.Dispose();
    }

好了,大家看到没?这里的dr一定要关闭哦,你应该明白这点。

ds为强类型数据集,推模型中必须要用到的。这里也要释放一下。

这些够了吗?不够,还差的远呢,还需要释放70%的资源,才能让你的服务器承受的住。

在报表页面中添加如下程式:

    protected void Page_UnLoad(object sender, EventArgs e)
    {
        //建立完页面时,释放报表文档资源
        doc.Close();
        this.Dispose();
        this.ClearChildState();
    }

UnLoad到底是什么时候执行的呢?有人说是关闭页面时?哈哈……你自己试试!!!

doc为报表文档对象,就因为这个的存在,所以才会老出毛病,doc+doc+++等于限制数量了,你就OVER了。

this.Dispose();其实这一句,垃圾回收器会自己去释放的,不过我建议还是自己DIS一下。

this.ClearChildState();经过我的测试,证明这一句程式是很重要的,他释放了服务器控件所占用的状态信息。由此我想到,报表占用的状态信息应该是很大的。

好了,我的程序还在调试当中,上面所说的应该可能不太准确,希望不要拍我~~~~

-=-------------------------------------------------------------------

2008-12-03

今天忽然想起来一件很重要的问题。

ASP.NET缓存释放问题。

不信你做水晶报表时,你看看虚拟内存的使用?我等了好几分钟都没有释放掉。

这又是一个新的话题。

posted on 2010-08-19 12:02  Crdown  阅读(1210)  评论(0编辑  收藏  举报