我们有一个网站存在性能问题,存储过程执行是瓶颈。造成这种情况的原因之一是其中一些存储过程在页面加载时启动。
因此,假设数据库负载很高,用户对页面上的报告加载所需的时间感到沮丧,并反复刷新页面,启动同一存储过程的新执行。
这是我们用来执行存储过程和管理连接的代码:
using (SqlCommand cmd = CreateCommand(qry, CommandType.StoredProcedure, args))
{
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapt.Fill(ds);
return ds;
}
即使用户离开页面或刷新页面,旧的执行仍然会访问数据库,产生一个新的。
两种可能的解决方案:
当生成它的用户离开它本来会显示的页面时,以某种方式终止存储过程的执行。
更进一步,尝试保留连接的相同实例,以便如果用户点击同一页面,它将等待来自前一个存储过程的结果,然后在页面上显示这些结果。
随着这些事情的发展,常见的做法是什么,它们是如何实施的?当用户离开调用它的页面时,我如何至少终止存储过程?
相关分类