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

这两天遇到一个问题令人比较郁闷,一个大概120行左右的存储过程在SQL Server2012的查询分析器里面执行,
速度非常理想,1秒不到,即可筛选抓取到大概500条数据记录。
但在C#程序代码里调用,就提示连接超时。把CommandTimeout设置为300,就要3分钟左右时间才能显示出来,
检查了几遍代码也没有发现错误。问题依旧。

原因分析:
1、由于在查询分析器里执行速度很快,并且数据量也不多。
2、只在程序里调用才有缓慢的情况。
3、设置CommandTimeout参数,就可以显示结果出来,但要很久。

综上分析,初步断定问题出在C#代码上。但检查后没有收获。

在百度上查询这方面的资料。
在CSDN论坛上终于找到类似的资料贴子。其中有一网友在回复中说“有可能是执行计划过期吧”,
真是一言惊醒梦中的我。

立即在查询分析器上执行:

exec sp_recompile @objname=‘存储过程名称‘

再次测试程序,这次终于成功了。速度很满意。

原因分析:
由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非存储过程侯或者显示指定重新编译), 而不是每次执行时都去生成执行计划。
当存储过程涉及的对象结构调整, 或者相关的数据产生了很大变化, 这可能导致原来的计划不适合当前的现状(执行计划过期), 这种情况下应该重新编译存储过程。

如果修改一次不行,可以再修改一次,再等会测试

原文地址:https://www.cnblogs.com/qi123/p/11370208.html

时间: 2024-09-30 02:04:25

【转】解决存储过程执行快,但C#程序调用执行慢的问题的相关文章

iOS程序的执行顺序和iOS程序文件执行顺序

iOS程序的执行顺序 首先从main.m文件的main函数开始执行的.int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } //1.principalClassName:应用程序对象的类名(UIApplication或其子类) //2.delegateClassName

rpyc + plumbum 实现远程调用执行shell脚本

rpyc可以很方便实现远程方法调用, 而plumbum则可以实现在python中类似shell的方式编码: 具体实现代码如下: Server.py import rpyc from rpyc.utils.server import ThreadedServer from plumbum import local from plumbum.cmd import sh class CalculatorService(rpyc.Service): """根据路径和脚本名执行脚本 :

ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了: header('Access-Control-Allow-Origin:*'); header("Access-Control-Allow-Headers: x-requested-with,content-type"); header('Access-Control-Allow-Methods: OPTION

Win10提示“没有关联的电子邮件程序来执行请求的操作”的解决方法

Win10提示“没有关联的电子邮件程序来执行请求的操作”怎么办?明明win10系统是由邮件程序的,为什么会提示需要安装电子邮件程序呢?这是因为我们没有设置邮件关联程序来打开邮件或者是邮件app功能没有打开导致的.下面小编就详细的为大家介绍Win10提示“没有关联的电子邮件程序来执行请求的操作”的解决方法. 一.检测邮件默认打开程序是否设置. 1.win+i打开设置. 2.打开应用. 3.查看默认应用下电子邮件默认应用是否被设置为邮件或者自己安装的电子邮件软件. 4.如果没有设置则点击下拉选择邮件

在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题

记录工作中遇到的问题,分享出来: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一个比较郁闷的问题,如下图: 点击库存或者点击销售,查询数据很慢,有的将近几十秒,查询数据用的是存储过程,在数据库中执行存储过程,查询数据是很快的,速度非常理想,1秒不到,但是c#程序中调用就要很久. 百度了很多,后来这上面的那篇文章中找到了原因所在: 原因分析:由于存储过程是预编译的, 在第一次执行的时候, 会生成执

Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题

Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序被挂住,而在终端上直接执行这个脚本则没有任何问题.原因: 先来看Java代码: public final static void process1(String[] cmdarray) {        Process p = null;        BufferedReader br = null

C程序编译执行过程

C程序编译执行过程 认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序). 执行----->在特定的机器环境下运行C程序. 如果用一个图 来表示: 以上过程仅仅是个大概,详细的过程相当复杂,下面这篇文章写得很详细,从中受益很多: 原文来自:http://www.vc

mysql点滴_02程序中执行sql语句报字符集问题解决

程序中执行  "SELECT t.EVENT_TYPE_ID FROM RATABLE_EVENT_TYPE t WHERE t.NAME='帐期末费用转移事件'"  报错 错误码:1267 不合法的混合字符集. 错误信息:mix of collations (gbk_bin,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' 解决办法:用binary()函数统一字符集 SELECT t.EVENT_TYPE_ID

12mybatis调用执行存储过程

mybatis 调用执行存储过程 mysql 声明建立存储过程 删除 在mysql中调用 -- 声明定义存储过程 delimiter $$ create procedure delbook(id int) begin delete from book where book_id=id; end$$ delimiter ; -- 删除存储过程 drop procedure delbook; -- 调用执行存储过程 call delbook(4); select * from book; mybat