我有以下代码运行以启动我的表计算(表计算触发了几个返回数千行的查询)。当我的应用程序只运行一个实例时,情况很好,但是2或更多然后服务器运行缓慢,我开始出错。
我应该将此代码转换为线程吗?怎么做的?
private static object _lock = new object();
private void RunTable(string outputType, string _outputDataType) {
Server.ScriptTimeout = 300;
string returnCode = string.Empty;
lock (_lock)
{
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MainDll"].ToString()))
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql.ToString(), connection))
{
command.CommandType = CommandType.Text;
command.CommandTimeout = 300;
returnCode = (string)command.ExecuteScalar();
Dispose();
}
Dispose();
}
}
答案 0 :(得分:1)
首先:如果您看到错误,请告诉我们您看到的错误。
第二:您正在读取多少数据(即您可以将所有数据加载到RAM中)吗?
第三:如果您无法一次加载所有数据,请尝试使用SqlDataReader
连续读取数据库。
关于多线程:它实际上取决于你的瓶颈在哪里。如果你的瓶颈在于从数据库读取,那么多线程就不会获得太多收益(特别是如果你的数据库不允许并发访问)。一旦从数据库中获取数据,可以使用线程来处理数据,并且当您必须使用SqlDataReader
时,由于您正在逐个记录读取数据,因此该数据特别有效。