【发布时间】:2012-05-23 18:49:34
【问题描述】:
我运行以下代码来启动我的表计算(表计算会触发一些返回数千行的查询)。当我的应用程序只运行一个实例时,一切都很好,但是 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();
}
}
【问题讨论】:
-
首先:如果您看到错误,请告诉我们您看到了什么错误。第二:你正在读取多少数据(即你可以将所有数据加载到 RAM 中)?
-
为了快速、简单、高效的多线程,你可以使用 BackgroundWorker 类 msdn.microsoft.com/en-us/library/… 但我猜你查询数据库的方式可能有问题,或者你可能需要一些SQL 调优。
-
当您说“一个实例/两个实例”时,您是指进程还是线程?
-
Dispose()自己在那里做什么?这肯定是不对的!using的好处是,在这种情况下,您甚至不需要手动调用command.Dispose/connection.Dispose(看看我在那里做了什么?)方法。省略它。
标签: c# asp.net .net multithreading sql-server-2005