做这个项目有点倒霉,快要验收的时候,发现微软ReportViewer控件的一个bug,导致我们的项目无法正常验收。

  问题描叙:用ReportViewer本地模式做的报表,在ASP.NET页面中呈现。在asp.net服务端有一个静态页面,用户轮播报表页面。这些页面被加载到一个盒子里面,然后在电视上面显示。最终电视就可以看到我们报表轮回的切换。在推广的过程中,电视终端越来越多,暴露出一个问题,报表播放久了就会出现内存溢出的问题。

  后来查资料,显示ReportViewer确实存在内存泄漏的问题,该如何解决这个问题呢?

  第一个解决方法:重启iis的应用程序域,对报表站点使用的应用程序域设置内存超过xGB的时候,回收一次内存。

  方案缺陷:在资源回收那一刻访问报表的时候会访问不成功,原因是无法正常访问session。

  补救措施:(1)将session存储到StateServer中(2)将session存储在数据库中  这两种方案经过测试都不行。

  

  遗憾的是我们的报表需要在带上轮播,资源回收那一刻这个问题就暴露出来了,而且随着电视终端增加频率越来越高,显然这中方案无法满足现有的需求。

  第二个解决方法: 换报表控件。

  首先花了两天的时间研究html报表,发现目前没有一款html报表的图标类型有ReportService丰富,最后还是选择使用ReportService来做。

  可能由于ReportViewer确实很方便,我还是考虑使用ReportViewer来展现报表数据,这次不同的是ReportViewer.PrcessingMode=Remote。经过测试这个中方法应用程序服务器依然存在内存泄漏的问题。

  接着就想到直接访问Report Server的方式来解决问题。

  1. 服务端报表如何发布
  2. 新的方案下做测试页面测试是否存在内存泄漏的问题。(应用程序服务器端和前端)
  3. 本地RDLC报表是否能直接copy到服务端使用
  4. ReportServer匿名校验

  报表服务端发布:

  (1)在 开始 ->Microsoft SQL Server 2008 R2 ->配置工具 下Reporting Services 配置管理器可以配置报表服务器。

  (2)通过SQL Server Business Intelligence Development Studio,右键“部署”就能部署到报表服务器上面。

  (3)报表服务开启后,默认情况下可以通过http://localhost:80/reports来管理发布到报表服务器上的文件,如果重现部署,可先在这里删除已部署的报表文件。

  (4)通过http://localhost/reportserver可以访问报表服务器上的所有的报表。

  测试是否存在内存泄漏的问题:

  这一点我已经做了,测试结果是报表服务器和应用程序服务器和浏览器端都没有内存泄漏的问题。源码比较麻烦,就不贴了。

  

  本地RDLC报表能直接copy到服务端使用:

  (1)直接将RDLC文件的后缀名修改成RDL。

  (2)在ReportService项目中通过“添加现有项”添加到项目中。

  (3)修改数据源的连接字符串和数据集的查询字符串

  (4)在访问报表url后面添加&parameter1=aa&parameter2=bb的方式可以为报表中的url赋值。

  (5)对于有参数的报表页面,默认情况下会出现toolbar,用于输入参数。当然通过上面的url传参数的方式,访问报表时会默认将参数加载到toolbar中并刷新报表。

     在参数后后面添加&rc:Toolbar=false可以隐toolbar,添加&rc:Parameters=Collapsed可以折叠toolbar。下图上方就是报表任务栏:

    

ReportViewer Url详细参数参见:  http://technet.microsoft.com/en-us/sqlserver/ms152835(v=sql.105)

下周研究如何实现匿名访问报表服务器的问题。

ReportViewer内存泄漏问题解决方案[上]的更多相关文章

  1. Android开发——常见的内存泄漏以及解决方案(二)

    )Android2.3以后,SoftReference不再可靠.垃圾回收期更容易回收它,不再是内存不足时才回收软引用.那么缓存机制便失去了意义.Google官方建议使用LruCache作为缓存的集合类 ...

  2. Android开发——常见的内存泄漏以及解决方案(一)

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52333954 Android的内存泄漏是Android开发领域永恒的 ...

  3. Android Native 内存泄漏系统化解决方案

    导读:C++内存泄漏问题的分析.定位一直是Android平台上困扰开发人员的难题.因为地图渲染.导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码.解决这个问题对于产品质量尤为重要和关 ...

  4. iOS - Block产生Memory Leaks循环引用导致的内存泄漏以及解决方案

    在ARC(自动引用技术)前,Objective-c都是手动来分配释放 释放 计数内存,其过程非常复杂. ARC技术推出后,貌似世界和平了很多,但是其实ARC并不等同于Java或者C#中的垃圾回收,AR ...

  5. ios开发系列之内存泄漏分析(上)

    ios自从引入ARC机制后,一般的内存管理就可以不用我们码农来负责了,但是一些操作如果不注意,还是会引起内存泄漏. 本文主要介绍一下内存泄漏的原理.常规的检测方法以及出现的常用场景和修改方法. 1.  ...

  6. JavaScript 中的内存泄漏

    JavaScript 中的内存泄漏 JavaScript 是一种垃圾收集式语言,这就是说,内存是根据对象的创建分配给该对象的,并会在没有对该对象的引用时由浏览器收回.JavaScript 的垃圾收集机 ...

  7. JavaScript中的内存泄漏以及如何处理

    随着现在的编程语言功能越来越成熟.复杂,内存管理也容易被大家忽略.本文将会讨论JavaScript中的内存泄漏以及如何处理,方便大家在使用JavaScript编码时,更好的应对内存泄漏带来的问题. 概 ...

  8. JavaScript如何工作:垃圾回收机制 + 常见的4种内存泄漏

    原文地址: How JavaScript works: memory management + how to handle 4 common memory leaks 本文永久链接:https://d ...

  9. hashCode竟然不是根据对象内存地址生成的?还对内存泄漏与偏向锁有影响?

    起因 起因是群里的一位童鞋突然问了这么问题: 如果重写 equals 不重写 hashcode 会有什么影响? 这个问题从上午10:45 开始陆续讨论,到下午15:39 接近尾声 (忽略这形同虚设的马 ...

随机推荐

  1. Java web--Filter过滤器分IP统计访问次数

    分IP统计访问次数即网站统计每个IP地址访问本网站的次数. 分析 因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便. 因为需要分IP统计,所以可以在过滤器中创建 ...

  2. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  3. Xcode添加摄像机访问权限<转>

    转帖地址:http://www.manew.com/thread-97708-1-1.html ============================================== ios系统 ...

  4. Python发送邮件(支持中文)

    # -*- coding: utf-8 -*- from email.header import Header from email.mime.text import MIMEText import ...

  5. Mac升级到Yosemite后默认的php版本不支持imagetfftext函数问题解决

    Mac升级到yosemite后,php也自动升级,运行项目的时候发现后台验证码显示不出来.调试一下发现imagetfftext这个函数不存在,应该gd没有安装完全,因为Mac上的php实现系统自带的, ...

  6. win7和Ubuntu双系统折腾记

    哎,最近老是写些没涵养的博客.哥们问我怎么不分享点cv的论文思路,或者搞点深度学习调参的经验.因为真正跑深度学习搞 计算机视觉的时候,时间悄悄过去了,只有环境出Bug了,才是我最难受的时候,每一次搞好 ...

  7. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

  8. DevExpress.XtraGrid.GridControl 实现自定义tooltip

    DevExpress.XtraGrid.GridControl 控件默认的tooltip显示的每一个单元格的文本值,但是实际工作中会出现各种需求.我这里就有一个列是折扣率显示的值是0-1之间的两位小数 ...

  9. fastclick 解决js穿透问题

    http://www.tuicool.com/articles/VniQRr http://www.cnblogs.com/MrBackKom/archive/2012/06/26/2564501.h ...

  10. svn更新操作时提示database is locked

    If you're on Windows version just let's do the next: Right click on the repo folder and go to Tortoi ...