在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#中计算执行前存储过程的执行时间的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET MVC Core(C#) 中执行 Oracle 存储过程 (PL/SQL)