C#中进程的多线程

时间:2012-05-23 18:49:34

标签: c# asp.net .net multithreading sql-server-2005

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

1 个答案:

答案 0 :(得分:1)

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

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

第三:如果您无法一次加载所有数据,请尝试使用SqlDataReader连续读取数据库。

关于多线程:它实际上取决于你的瓶颈在哪里。如果你的瓶颈在于从数据库读取,那么多线程就不会获得太多收益(特别是如果你的数据库不允许并发访问)。一旦从数据库中获取数据,可以使用线程来处理数据,并且当您必须使用SqlDataReader时,由于您正在逐个记录读取数据,因此该数据特别有效。