在c#中计算执行前存储过程的执行时间

Posted

技术标签:

【中文标题】在c#中计算执行前存储过程的执行时间【英文标题】:calculate execution time of before execution stored procedure in c# 【发布时间】:2013-11-17 05:34:33 【问题描述】:

我正在开发一个 C# .net 应用程序

我正在从我的 c# 代码执行一个存储过程,它需要将近 2 分钟才能完成它的执行。我在后端使用 SQL Server 2008 R2。所以我想显示一个进度条,显示存储过程的执行进度。为此,我需要计算执行存储过程的执行时间。那么有什么方法可以计算执行时间+此应用程序在我的客户端数量上运行,因此存储过程的执行时间因客户端而异。所以请给我建议或搜索如何做到这一点的方法?

提前感谢您的宝贵反馈

【问题讨论】:

【参考方案1】:

好问题。以下是您可能会考虑的一些选项。

A.这是查询计划的一个很好的解释。 How do I obtain a Query Execution Plan?

B.在存储过程中添加反馈(即报告回表)。我假设有一组许多任务。尝试在存储过程中的每个任务之间进行报告,以便为您提供更精细的度量。如果没有反馈到表格更整洁,您甚至可以将其分解为不同的存储过程。

C.一旦程序运行一次,您可能会获得最佳估计时间。

D.优化您的存储过程。我可以想象,如果它运行得很快,对所有人都会更好。这意味着您的估计将减少!需要考虑的事项:

使用临时表与子查询/许多视图:[阅读此问题]。 (Why would using a temp table be faster than a nested query?)

您是否需要它来处理所有内容,或者是否可以只处理自上次执行以来的增量?

希望有一些帮助。

【讨论】:

【参考方案2】:

根据您提供的信息,我只能猜测,但我仍然只看到两种方法:

如果过程的执行长度取决于传递给它的参数(疯狂猜测:字节数组的长度),您可以测量某些级别的参数的平均执行长度,这可以是硬编码的(或者更好的是你可以在您的应用程序中从文件中解析它),然后用于预期运行时间估计,=> 并且随着时间的推移,用户会看到需要多长时间才能完成。 如果它不是基于传递的参数,而是基于数据库服务器负载,您可以调用服务器以获取其 CPU/硬盘驱动器负载水平,或者甚至根据最近的过程调用量来估计这些 => 然后再一次,这可能会导致您估算执行时间。

我想不出更具体的东西,除非你分享过程调用和它生成的 sql,最好是表和比例的细节。

【讨论】:

以上是关于在c#中计算执行前存储过程的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 程序中执行存储过程

在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)

SQL Server 存储过程在查询分析器中执行,但在 C# 中无法正常运行

ADO.Net(C#)中怎么执行Oracle的存储过程

使用 C# 执行存储过程

转解决存储过程执行快,但C#程序调用执行慢的问题