码迷,mamicode.com
首页 > 其他好文 > 详细

关于水晶报表慢的解决方法

时间:2015-03-16 21:14:52      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

我认为如果可以在选择一次报表的话,我是不会选择水晶报表了。除了免费算是个优势吧。

如果你不幸采用了水晶报表,就会碰到这个问题。

我用了预加载和子线程处理,基本算是缓解了。


 

1.首先在系统初始化的时候

       [STAThread]
        static void Main(string[] args)
        {
               ReLoadReports();    


        }    



        /// <summary>
        /// 预加载报表
        /// </summary>
        public static void ReLoadReports()
        {
            ThreadPool.QueueUserWorkItem(state => LoadCR());
        }

       public  static void LoadCR()
        {
        
            ReportClass repdoc = new dr_PT();
            //cache.Add("loadRC",repdoc);
            repdoc.Load( repdoc.FullResourceName);
            repdoc = new dr_TTHotel();
            repdoc.Load(repdoc.FullResourceName);
            repdoc = new dr_TTDV();
            repdoc.Load(repdoc.FullResourceName);
            repdoc = new dr_TTSeat();
            repdoc.Load(repdoc.FullResourceName);
            repdoc = new dr_PT58mm();
            repdoc.Load(repdoc.FullResourceName);
            repdoc = new dr_PT58mm2();
            repdoc.Load(repdoc.FullResourceName);
            repdoc = new dr_PT58mm3();
            repdoc.Load(repdoc.FullResourceName);
        }                   

 我本来想用hashtable做个缓存。后面思考水晶报表第二次运行会相对快点,基本判定有缓存。查了下相关资料,MSDN看到以下代码

https://msdn.microsoft.com/zh-cn/library/ms227445(v=vs.90).aspx

public virtual ReportDocument CreateReport()
{
if (nonEmbeddedReportDocument == null)
{
nonEmbeddedReportDocument = new ReportDocument();
nonEmbeddedReportDocument.Load(reportFileName);
}
return nonEmbeddedReportDocument;
}
ReportClass 继承自ReportDocument ,至于内建缓存如何缓存的没有太深究原理。

 


2.报表处理可以非UI线程处理。无需阻塞主线程。
所以在展示报表的时候我还是threadpool,代码就不上了。




3.其他性能问题的话,主要是加载数据量的问题了。这个根据业务自己控制下。


关于水晶报表慢的解决方法

标签:

原文地址:http://www.cnblogs.com/yuanhuaming/p/4342782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!