c# 执行存储过程慢

qtvb1987 2015-01-14 09:25:33
SqlCommand comm = new SqlCommand("存储过程", connm);
comm.CommandTimeout = 0;
comm.Parameters.AddRange(pas);
comm.CommandType = CommandType.StoredProcedure;
SqlDataReader sr = comm.ExecuteReader();


在查询分析器里查询很快,
但是在代码里执行很慢。请高手指点
...全文
379 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
neil_nature 2015-01-15
  • 打赏
  • 举报
回复
确认下问题 1.是否是数据库连接的问题:对比connection open 和close 状态的执行速度。 2.web的问题,用firebug的网络查看下请求和响应的时间。
  • 打赏
  • 举报
回复
在你的查询分析器中,它只查询一部分数据(只有几百条记录),而不是查询你的sql语句的所有结果。
  • 打赏
  • 举报
回复
先不要返回过多的查询结果,先查询 select count(*) ..... 之类的,让返回值只有一个简单的数值。 许多时候,90%的时间都在处理通讯上。所以那种查询10万行数据出来、然后在内存中再过滤成30条记录的做法,是非常慢的,应该直接告诉数据库仅返回30条记录。不是查询慢,而是根本就不应该滥用网络传输这么多数据。
qzyf1992 2015-01-14
  • 打赏
  • 举报
回复
看看你参数是不是弄错了
於黾 2015-01-14
  • 打赏
  • 举报
回复
所以让你定义一个StopWatch测试到底每个步骤执行时间是多少,而不是用眼睛看,用秒表掐 而且你程序每次重新打开运行,和运行过程中反复查询,时间也应该是不同的 你需要针对不同的情况做测试,看到底慢在哪里,而不是整个查询过程慢你就以为是其中一句话的问题
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
好像没关系 我测试SqlDataReader sr = comm.ExecuteReader(); 这里时有慢 有快 不确定 我现在搞不懂 有时很快,有时很慢。
於黾 2015-01-14
  • 打赏
  • 举报
回复
引用 8 楼 qtvb1987 的回复:
pas[0] = new SqlParameter("@ ", SqlDbType.Int); pas[0].Value = syear; 哦这个的类型 错了,关系不大吧
类型错误,存储过程在执行的时候就会尝试强制转换类型 关系到底大不大,改成正确的再试试不就知道了
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
pas[0] = new SqlParameter("@ ", SqlDbType.Int); pas[0].Value = syear; 哦这个的类型 错了,关系不大吧
於黾 2015-01-14
  • 打赏
  • 举报
回复
还有,如果你代码里连续执行2次存储过程,时间是一样的吗,2次都慢吗? 数据库有连接池 即使你断开了连接,但是如果马上又连接,就会比较快,而不用再重复一遍构造连接的过程
於黾 2015-01-14
  • 打赏
  • 举报
回复
跟你用本地数据库还是远程数据库没有关系 你用查询分析器,它使用的是长连接,也就是一开始需要你登陆,然后就已经连接上了,你执行sql语句都是直接执行,不用每执行一条sql语句都连接再断开 而你代码里要先连接,再执行 所以你先测试一下到底是哪里慢,再想对应的办法解决,不要在不相干的问题上过多的纠结
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
我用的本地数据库都慢 。。。。。
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
我执行 exec [存储过程] @year='‘,@editor='',@magid=0 很快 1秒不用
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
SqlParameter[] pas = new SqlParameter[3]; pas[0] = new SqlParameter("@ ", SqlDbType.Int); pas[0].Value = syear; pas[1] = new SqlParameter("@", SqlDbType.VarChar, 60); pas[1].Value = editor; pas[2] = new SqlParameter("@", SqlDbType.Int, 4); pas[2].Value = magid;
於黾 2015-01-14
  • 打赏
  • 举报
回复
先用Stopwatch确定到底是什么东西执行慢,每一步的具体执行时间是多少,再具体分析原因 如果你是数据库连接慢而不是查询语句执行慢,你再纠结也白纠结
ajaxfeifei 2015-01-14
  • 打赏
  • 举报
回复
1.确认查询分析器每次执行都清空的缓存,如果查询分析器确实慢的话看第二点。 2.确认comm.Parameters.AddRange(pas);这里的pas参数里面是否每个参数都指定了数据类型。 3.考虑网络状况(可能性很小)
qtvb1987 2015-01-14
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
在你的查询分析器中,它只查询一部分数据(只有几百条记录),而不是查询你的sql语句的所有结果。
其实我做的是一个统计查询的 只有几百条数据的结果,可能中间 有些 相加减 相除 算法 页面加载 有时快 有时慢

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧