0

我有以下代码运行以启动我的表计算(表计算触发了一些返回数千行的查询)。当我的应用程序只运行一个实例时,一切都很好,但是 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();
            }
        }
4

1 回答 1

1

首先:如果您看到错误,请告诉我们您看到了什么错误。

第二:您正在读取多少数据(即您可以将所有数据加载到 RAM 中)?

第三:如果你不能一次加载所有数据,那么尝试使用SqlDataReader连续从数据库中读取。

关于多线程:这真的取决于你的瓶颈在哪里。如果您的瓶颈在于从数据库读取,那么通过多线程处理您将不会获得太多收益(特别是如果您的数据库不允许并发访问)。一旦从数据库中获取数据,您就可以SqlDataReader使用线程来处理数据,并且当您必须使用 an 时效果特别好,因为您正在逐条读取数据。

于 2012-05-23T18:59:32.833 回答