【问题标题】:What is the most efficient way to produce a report against a large set of in memory data in .NET?针对 .NET 中的大量内存数据生成报告的最有效方法是什么?
【发布时间】:2009-10-08 16:07:04
【问题描述】:

我正在开展一个每月向数十万(如果不是数百万)客户发送账单的项目。很多数据需要通过内部 API 动态地进行操作和动态计算。

现在我有一个过程,它一次处理 2,500 张钞票的块,并在每个范围完成时写出一个包含所有数据的 XML 文件。然后我使用 Crystal Reports 报告该数据,这需要几分钟时间。我正在寻找一种更好的方法来报告这些数据并需要一些建议。

Crystal 解析 XML 的速度很慢吗?我尝试向 Crystal 扔一个内存数据集,但似乎一旦我超过 500 条左右的记录,XML 路由实际上更有效。我是否应该将数据写入我们的 SQL 数据库并使用索引优化以这种方式进行报告?还是我错过了一种更快的替代方法?

【问题讨论】:

    标签: .net crystal-reports reporting


    【解决方案1】:

    根据我的经验,Crystal Reports 在大型报表项目上的速度很慢。

    我发现其他一些报告解决方案往往能更好地处理大型报告项目,尤其是如果它们是从内存数据集生成的。我建议为此尝试Telerik's reporting tool

    【讨论】:

      【解决方案2】:

      您是否考虑过对报告进行多线程处理?或者使用多个服务器/服务来处理报告生成的子集。

      我们使用 Crystal 报表 XI,发现它非常慢。此外,当从单个服务进行多线程处理时,Crystal 报表对您可以创建的线程报表数量有限制。 我们使用来自 Sql Server 2005 的 PdfSharp 和存储过程来运行我们的报告(比您的 baches 小,比如大约 30 000 个报告)。这是一个非常耗时的过程。

      因此,请查看多个服务/服务器作为生成子集的选项。

      编辑

      事后想了想,我在 X-) 之前发布了Crystal Question

      【讨论】:

        【解决方案3】:

        我过去在 CR 中遇到过同样的事情。当我遇到这个问题时,我将新的开发从 XML 样式表切换到 HTML。它执行速度更快,但开发时间更长。

        【讨论】:

        • 这对我正在做的事情来说似乎太难了。报告的布局非常复杂,还使用条形码和隐藏部分。 XML 样式表可以处理吗?
        • 条形码只是一种字体,因此它可以做到这些(尽管您可能需要进行一些格式化)。如果您可以在 HTML 中创建它,那么您的复杂布局应该不会太糟糕。 XSL 中的条件可以处理被抑制的部分。
        【解决方案4】:

        就我个人而言,我发现 Crystal Reports 占用大量内存,即使是小型数据集也需要很长时间才能启动。我们也是在 VS 2008 中为使用 Win2K 的用户开发的,所以存在版本冲突,因为 VS 2008 附带的 CR 版本只能在 XP 或更高版本上运行。

        我最终将我们所有的报告转换为in-memory objects serialized to XML,这些报告通过 XSL 转换为 HTML/CSS,并且可以使用 WebBrowser 控件进行打印。现在,我们的报告会在 XML 构建完成后立即加载,而不是等待 Crystal 启动,这将查看时间从约 30 秒减少到不到一秒,并将我们的 MSI 大小从约 27MB 减少到 1.5MB。

        【讨论】:

          猜你喜欢
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多