我已经在ASP.Net应用程序上工作了很长时间,并且有10个以上的客户端正在使用该应用程序。但是现在我在应用程序中发现了一个问题,就是说,我有一个存储过程调用,执行该过程大约需要30秒。这不是问题,因为SQL代码非常复杂并且循环很多次。问题是 : 每当执行该存储过程调用时,我将无法使用任何其他功能或存储过程调用。 当我尝试调试时,问题在于'DataAdapter.Fill()'函数正在等待第一个存储过程调用完成。
我执行存储过程调用并返回数据的代码是:
ds = DB.ExecuteQuery_SP("SelectOutstandingReportDetailed",parArray);
所有存储过程调用都通过此函数进行。因此,当我的第一个存储过程调用“ A”正在运行时,直到“ A”完成后,存储过程调用“ B”才会执行。
这会降低应用程序的整体性能,并导致数据检索出现问题。 我浏览了google,发现“线程化”可能会有所帮助,但我无法正确执行线程化。我对这类事情不太熟悉。如果您可以解决此问题,将很有帮助。 我的第一个存储过程调用是:
ds = DB.ExecuteQuery_SP("[SelectaccLedgersDetailsByID]",ParamArray);
其中ds是DataSet对象。 第二个存储过程调用为:
public static bool OpenConnection()
{
try
{
Server = (String)HttpContext.GetGlobalResourceObject("Resource","Server");
DBName = (String)HttpContext.GetGlobalResourceObject("Resource","DBName");
username = (String)HttpContext.GetGlobalResourceObject("Resource","username");
PassWord = (String)HttpContext.GetGlobalResourceObject("Resource","PassWord");
string ConnectionString;
ConnectionString = "server=" + Server + "; database=" + DBName + "; uid=" + username + "; pwd=" + PassWord + "; Pooling='true';Max Pool Size=100;MultipleactiveResultSets=true;Asynchronous Processing=true";
CON.ConnectionString = ConnectionString;
if (CON.State != ConnectionState.Open)
{
CON.Close();
CON.Open();
}
}
catch (Exception ea)
{
}
return false;
}
我当前的数据库连接打开功能是:
static SqlConnection CON = new SqlConnection();
其中“ CON”是公共SqlConnection变量
{{1}}
我发现了问题,即所有存储过程调用都通过此“ CON”对象执行。如果每个存储过程调用都有单独的SqlConnection对象,则没有问题。 因此,可以为每个ExecuteQuery_SP调用建立单独的SqlConnection。 如有疑问,请发表评论。 谢谢