Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在多个线程上运行多个SSRS报告_C#_Sql Server_Multithreading_Reporting Services - Fatal编程技术网

C# 如何在多个线程上运行多个SSRS报告

C# 如何在多个线程上运行多个SSRS报告,c#,sql-server,multithreading,reporting-services,C#,Sql Server,Multithreading,Reporting Services,我有大约100份每周和每月运行的链接报告。我组装了一个c#控制台,它可以从db表动态创建特定时期的报表服务器文件夹,并从db表创建链接的SSRS报表。这些报告可以正常运行,但每个报告都在foreach循环中一次运行一个,如果隔夜运行这些报告就可以了,但有时这些报告会失败(无论出于何种原因),失败的报告会在DB中标记为失败 我的问题是: 如何在一个线程上运行(例如)10个报告并同时运行每个线程?10个线程同时运行,因此运行所有报告的时间应该快得多。这将花费一小部分时间在周一重新运行任何失败的报告。

我有大约100份每周和每月运行的链接报告。我组装了一个c#控制台,它可以从db表动态创建特定时期的报表服务器文件夹,并从db表创建链接的SSRS报表。这些报告可以正常运行,但每个报告都在foreach循环中一次运行一个,如果隔夜运行这些报告就可以了,但有时这些报告会失败(无论出于何种原因),失败的报告会在DB中标记为失败

我的问题是: 如何在一个线程上运行(例如)10个报告并同时运行每个线程?10个线程同时运行,因此运行所有报告的时间应该快得多。这将花费一小部分时间在周一重新运行任何失败的报告。这可能吗

在我的c#控制台中,我使用ReportingService2010创建链接报告:

ReportingService2010.CreateLinkedItem(linkedReport, folder, existingReportPath, props);

ReportingService2010.SetExecutionOptions(reportPath, "Snapshot", new NoSchedule());

ReportingService2010.SetItemHistoryOptions(reportPath, true, true, new NoSchedule());

ReportingService2010.UpdateItemExecutionSnapshot(reportPath);
任何帮助都将不胜感激。
非常感谢

直截了当的解决方案是:创建几个共享所有报告生成的C#console客户端(就像几个客户端同时访问可用报告一样)。通过这种方式,您可以确定报告生成是成批执行的。就是这样,因为您不能强制SSRS服务器同时处理一定数量的报告。无论您如何请求生成报告,它都将处理其工作负载

尽管如此,我认为这是一种错误的做法

您必须考虑到SSRS将同时处理任意数量的报告,即使同时请求和处理这些报告,SQL Server引擎也会(再次)按其认为应该的方式处理工作负载。所有这一切都意味着,同时执行所有报告(或成批执行N个报告)并不能保证总时间会更短。需要考虑的另一件事是,呈现报告可能占用总执行时间的很大一部分(有时比执行所有sql查询要多得多),这会大量使用CPU

另一方面,正确的方法是创建一个包含所有历史数据的数据仓库(这纯粹是数据库引擎流程),而报告(应该使用日期参数)只是访问数据仓库中已经存储的数据的一种方式

无论如何,我知道创建DW是一个大项目,您正在寻找一个更简单的解决方案。为此,您需要确定瓶颈在哪里(sql引擎、ssrs渲染等),并尝试平衡或增加资源(如果可能)以释放该瓶颈


这可能不是您需要的答案,但可以为您节省一些时间,尝试开发一个对您的总处理时间影响很小或没有影响的解决方案。

您意识到SSRS有一个功能,您可以安排运行报告?以这种方式运行它们似乎没有充分的理由。您能否动态创建报表服务器文件夹并通过计划创建链接报表?对于每周/每月,我们需要创建一个具有新处理周期的文件夹结构,以便我们的用户可以查看任何给定时间的历史数据。报表历史记录可以通过快照实现。可能会有一个分组或任何快照的自定义列表。无论如何,仅仅依靠快照,您的整个过程都会大大改进:如果您运行快照,您必须完成的任务是“简单”下载每个报表的最新快照,并将其存储在相应的文件夹中。感谢您回复我Ben和Paulo。我们目前正在创建报告历史记录。B创建链接报告时,我们正在创建快照。快照是在一个文件夹中创建的一周,比如201401。接下来的一周,我们将创建相同的报告,不同的日期作为快照,并在文件夹201402中创建。我们正在创建大约100个报告,一次运行一个报告是没有效率的。我希望找到一种在一个线程上创建10个报告并运行多个线程的方法。这可能吗?