做这个项目有点倒霉,快要验收的时候,发现微软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. PAT 03-树1 树的同构 (25分)

    给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A.B.G的左右孩子互换后 ...

  2. lnmp下启动mysql报错 The server quit without updating PID file

    启动时候错误代码:Starting MySQL[FAIL.] The server quit without updating PID file (/var/run/mysqld/mysqld.pid ...

  3. 第三次作业:caculator

    第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...

  4. BitLocker 加密工具挂起和恢复命令行(windows7)

    如果你的硬盘使用BitLocker加密了,但是有时候需要高效率的硬盘做某些事情,可以暂时挂起加密,命令行如下方便做个bat. 挂起: manage-bde -protectors -disable C ...

  5. 解决String TestContext下使用junit4抛出异常(java.lang.NoClassDefFoundError)的问题

    Spring版本2.5.5,JUnit 版本 4.8.1,使用了 Spring TestContext 的 SpringJUnit4ClassRunner.一直使用这个版本的JUnit,在写简单的测试 ...

  6. 一个C#语法高亮插件

    语法高亮对程序员阅读代码来说有着不小的帮助,虽然VisualStudio本身支持C#语法高亮,但也只是对关键字.类名.字符串等少数元素加了标记,而我们代码中主题:变量.函数.属性.事件等都没有进行高亮 ...

  7. Rsa加解密Java、C#、php通用代码 密钥转换工具

    之前发了一篇"TripleDes的加解密Java.C#.php通用代码",后面又有项目用到了Rsa加解密,还是在不同系统之间进行交互,Rsa在不同语言的密钥格式不一样,所以过程中主 ...

  8. [Eclipse] - eclipse集成jboss7.1

    参考来源:http://www.cnblogs.com/HD/p/4000554.html 1.打开eclipse: 2.输入:jboss tools 本例已经安装,未安装的话点Install 3.只 ...

  9. Android笔记之——事件的发生

    Java:package com.example.helloworld;import android.content.Intent;import android.support.v7.app.AppC ...

  10. [原创.数据可视化系列之五]韩国"萨德"系统防御图

    自从7月8日美国和韩国共同宣布将在韩国部署萨德反导系统后,韩国国内对此事的巨大争议以及本地区一些国家的强烈不满情绪在持续发酵.“萨德”(THAAD)全称“末段高空区域防御系统”,是美国导弹防御局和美国 ...