- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序 (.NET Framework 4.5) 中,我渲染了一些 RDLC 报告 (50-60),以便将它们导出为单个 PDF。
不幸的是似乎有一个很大的内存泄漏,基本上每个 LocalReport
永远不会被处置。
这是我的代码:
public void ProcessReport(ReportDataSource[] reportDS, string reportPath)
{
const string format = "PDF";
string deviceInfo = null;
string encoding = String.Empty;
string mimeType = String.Empty;
string extension = String.Empty;
Warning[] warnings = null;
string[] streamIDs = null;
Byte[] pdfArray = null;
using (var report = new LocalReport())
{
report.EnableExternalImages = true;
report.ReportEmbeddedResource = reportPath;
report.Refresh();
foreach (var rds in reportDS)
{
report.DataSources.Add(rds);
}
report.Refresh();
try
{
pdfArray = report.Render(format, deviceInfo, out mimeType, out encoding,
out extension, out streamIDs, out warnings);
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.Message);
throw;
}
report.ReleaseSandboxAppDomain();
report.Dispose();
//Add pdfArray to MemoryStream and then to PDF - Doesn't leak
}
}
report.Render
get 被称为添加 20-30mb,并且在我关闭应用程序之前它们永远不会下降。我确定使用
MemoryStream
不是问题,因为即使评论我仍然会在内存中获得 200mb-250mb 永远不会被释放。这很糟糕,因为在运行此应用程序 3-4 次后,它会达到 >1GB,直到它甚至不再运行。我也尝试手动调用
GarbageCollector
但没有用。该应用程序是 32 位的。
最佳答案
我有一个真正的解决方案,可以解释原因!
事实证明,这里的 LocalReport 使用 .NET Remoting 动态创建子应用程序域并运行报告,以避免内部某处的泄漏。然后我们注意到,最终,报告将在 10 到 20 分钟后释放所有内存。对于生成大量 PDF 的人来说,这是行不通的。然而,这里的关键是他们正在使用 .NET Remoting。 Remoting 的关键部分之一是所谓的“租赁”。租赁意味着它将保留那个编码(marshal)对象一段时间,因为远程处理通常设置起来很昂贵,而且它可能会被多次使用。 LocalReport RDLC 正在滥用此功能。
默认情况下,租赁时间是... 10 分钟!此外,如果有什么东西向它发出各种调用,它会再增加 2 分钟的等待时间!因此,它可以随机在 10 到 20 分钟之间,具体取决于调用的排列方式。幸运的是,您可以更改此超时发生的时间。不幸的是,您只能为每个应用程序域设置一次...因此,如果您需要除 PDF 生成之外的远程处理,您可能需要让另一个服务运行它,以便您可以更改默认值。为此,您需要做的就是在启动时运行以下 4 行代码:
LifetimeServices.LeaseTime = TimeSpan.FromSeconds(5);
LifetimeServices.LeaseManagerPollTime = TimeSpan.FromSeconds(5);
LifetimeServices.RenewOnCallTime = TimeSpan.FromSeconds(1);
LifetimeServices.SponsorshipTimeout = TimeSpan.FromSeconds(5);
关于c# - RDLC 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229762/
我有一份 RDLC 报告说我遇到了分页符问题。该报表有一个组,其中包含许多无法在一页中显示的记录。此报告在正常模式下呈现良好,但当我切换到打印模式时,出现以前不存在的“额外”分页符。这会导致报告打印在
我试图在 SQL Server Reporting Services RDLC 报告中表示父子孙关系。该报表将呈现到托管在 WPF 应用程序中的报表查看器控件中。我正在使用基于 IEnumberabl
通常在 RDLC 报告中,如果您使用标题,它会在每一页上重复出现。 如果我只想在第一页显示标题而不显示其余页面,有什么解决方案?有什么方法可以告诉哪些页面上的页眉可见? 最佳答案 您不能对页眉执行此操
我有一个显示表格的 RDLC 报告。 此表中的某行在某些情况下不应出现。 如果这些条件适用,我可以使用表达式将 Hidden 属性设置为 false。 问题是,虽然隐藏了,但该行仍在表中发生,即它没有
我有一个没有标题的 .rdlc 报告(我有组标题) 我想将 PageNumber 放在组标题上。 如果我使用 Globals!PageNumber 我会得到这个错误: textrun 'Textbox
多年来,我一直在使用 SSRS 报告(RDL 和 RDLC),但我还没有找到解决这个问题的方法:假设我的报告中有 x 个字段。我想一次突出显示所有字段并同时修改所有字段的背景颜色、前景色、字体和字体大
我制作了一份 RDLC 报告,该报告根据我提供的数据集生成其 tablix。我需要单元格的内容(Tablix 中的每个文本框)来根据其内容更改其背景颜色。 例如: Name | Val Joe |
我制作了一份 RDLC 报告,该报告根据我提供的数据集生成其 tablix。我需要单元格的内容(Tablix 中的每个文本框)来根据其内容更改其背景颜色。 例如: Name | Val Joe |
我已经创建了一个 rdlc 报告。我的表单上有一个 reportViewer。当我尝试加载报告时,我得到:“尚未指定报告 'xxxx.rdlc' 的报告定义”。我想不通。我有一个数据表,其中包含报告所
哪些版本的 Microsoft Visual Studio Express 可以编辑 rdlc文件? 我需要一个免费资源供最终用户编辑报告以修复外观问题,而无需强制他们购买完整的 VS 许可证。 最佳
有没有办法只在第一页显示报告标题?正如预期的那样,PageHeader.PrintOnFirstPage 仅显示或隐藏第一页的页眉。客户希望标题只出现在第一页上,有点像文档中的标题。我看了MS-RDL
我已阅读有关自定义报告项 (CRI) 的这篇文章 http://msdn.microsoft.com/en-us/magazine/cc188686.aspx 唯一的问题是 CRI 只能用于报告服务,
我在一个 Windows 应用程序中工作,我希望在我的 RDLC 报告文本中是合理的。 最佳答案 我做了一个函数来转换字符串列表中的文本。您可以使用没有标题的表格将其显示为对齐的段落。
在我的应用程序 (.NET Framework 4.5) 中,我渲染了一些 RDLC 报告 (50-60),以便将它们导出为单个 PDF。 不幸的是似乎有一个很大的内存泄漏,基本上每个 LocalRe
我有一个Visual Studio 2005解决方案,其中包含两个项目-VB中的Windows Forms项目和C#中的类库。我的VB项目包含一个RDLC报告文件。 我最近了解到,您可以向RDLC报告
我正在生成 RDLC XML 架构并在 ReportViewer 控件中显示报告。没有问题。 现在,我想要一个包含 2 个表和 2 个不同数据集的报告。 生成这样的东西:
我有一份看起来不错的 RDLC 报告,但奇怪的是,数据并没有按照我在用作数据源的 XSD 文件中指定的方式进行排序。当我在 XSD 文件中“预览数据”时,它被正确排序。 我在我的调用 ASP 文件或
我在数据库中有值: 10.4 33 42.87 1.01 22.1 8 我知道我可以在 RDLC 报告中格式化数字,但是,我如何确保数据的输出始终为: 10.40 33.00 42.87 1.01 2
使用 ReportViewer,我想使用 rdlc 文件在一份 pdf 中呈现多个报告。 Byte pdfByte = Byte(); pdfByte = ReportViewer.LocalRepo
我正在处理 RDLC 报告,我使用 DB 图像,并将其大小类型设置为比例,如果图像的尺寸与边框不完全一样,则边框不适合..没关系,但是图像将根据边框左上对齐,而我需要它居中(在 PDF 上),而在 I
我是一名优秀的程序员,十分优秀!