做这个项目有点倒霉,快要验收的时候,发现微软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. QNDataSet打印预览自动关闭问题

    问题:打印预览后,数据集自动关闭 解决: TQNDataSet = class(TFDMemTable) private protected procedure PSReset; override; ...

  2. SpringMVC无法获取请求中的参数的问题的调查与解决(1)

    *更新:本文第一版中犯了比较大的错误,无论@RequestBody还是@RequestParam注解一样,都会使用全局的Encoding进行解码,会导致特殊编码的参数值丢失. 只要抛弃掉注解,就完全可 ...

  3. python基础学习笔记3

    特殊方法与多范式   Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序 ...

  4. 基于WDF的PCI/PCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序

    原文地址:http://www.cnblogs.com/jacklu/p/6139347.html 正如前几篇博客所说,使用WDF开发PCIe驱动程序是我本科毕业设计的主要工作.在读研的两年,我也分别 ...

  5. HttpClient接口测试之会话保持

    HttpClient接口测试之会话保持     HttpClient4.X自带会话保持功能,使用同一个HttpClient未关闭的连接即可保持登陆会话,如果多个HttpClient想要使用一个登陆会话 ...

  6. RequireJS基础(二)

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...

  7. RequireJS 基础(一)

    RequireJS由James Burke创建,他也是AMD规范的创始人. RequireJS会让你以不同于往常的方式去写JavaScript,你将不再使用script标签在HTML中引入JS文件,以 ...

  8. linux yum下载RPM包后再安装LAMP环境

    1.下载yum插件 yum-downloadonly,实现只下载软件包的功能. yum install yum-downloadonly 或者 yum install yum install yum- ...

  9. 高仿淘宝和聚美优品商城详情页实现《IT蓝豹》

    高仿淘宝和聚美优品商城详情页实现 android-vertical-slide-view高仿淘宝和聚美优品商城详情页实现,在商品详情页,向上拖动时,可以加载下一页. 使用ViewDragHelper, ...

  10. cef3 获得js 返回值, 以及js 指挥delphi 函数的 总结参考

     cef3  如何加载 本地html 文件.   请教老师[吐槽]常忘<run_fan@qq.com>  22:21:45@lazarus 下载cef3中的范例中就有  [吐槽]常忘< ...