C# c中使用相同方法的动态线程
在我的示例中,我尝试使用多个线程在数据库中搜索一个数字。我动态地创建线程,但在我的代码中,它看起来只有最后一个线程可以工作。我创建线程或db连接是否有任何错误 exp:我的数据库中有6条记录: 2,3,5,7,11,13 db.threadCount=2它会动态更改db记录 taskCount[temp]=3您可以认为它是db的一半C# c中使用相同方法的动态线程,c#,multithreading,C#,Multithreading,在我的示例中,我尝试使用多个线程在数据库中搜索一个数字。我动态地创建线程,但在我的代码中,它看起来只有最后一个线程可以工作。我创建线程或db连接是否有任何错误 exp:我的数据库中有6条记录: 2,3,5,7,11,13 db.threadCount=2它会动态更改db记录 taskCount[temp]=3您可以认为它是db的一半 for (int i = 0; i < db.threadCount(); i++) {
for (int i = 0; i < db.threadCount(); i++)
{
int temp = i;
threadEnds+= taskCount[temp];
thereads[i] = new Thread(() => db.searchh(threadBegins,threadEnds, number, temp));
thereads[i].Start();
threadBegins+= taskCount[temp];
}
我的搜索功能:
public void searchh(int starting, int ending, int sitem,int id)
{
int rturn=0;
SqlConnection conn = new SqlConnection("Data Source=DESKTOP-G08P8S7\\SQLEXPRESS;Initial Catalog=numbers;Integrated Security=True");
string command = "SELECT * FROM mytable";
SqlCommand db_command = new SqlCommand(command, conn);
SqlDataAdapter dAdaptor = new SqlDataAdapter();
DataSet dSet = new DataSet();
DataTable dTable = new DataTable();
dAdaptor.SelectCommand = db_command;
conn.Open();
dAdaptor.Fill(dSet);
conn.Close();
dTable = dSet.Tables[0];
for (int i = starting; i <ending; i++)
{
Console.Write(dTable.Rows[i][0] + "value" + id + "th thread\n\n");
if (sitem == ((int)dTable.Rows[i][0]))
{
MessageBox.Show("Test");
}
//Thread.Sleep(1000);
}
}
我的输出:
第7值0螺纹
11第0个螺纹的值
13value 0th thread您不使用任务但尝试使用原始trheads的原因是什么?这并不是说这对您有任何帮助—您正在每个线程中加载数据库中的所有数据,这是一种非常低效的方式,根本没有任何性能提升。为什么不简单地编写一个适当的SQL语句呢?即使有充分的理由加载内存中的所有内容,也应该在加载一次数据后对数据进行分区和处理。这可以使用LINQ实现。没有什么比在具有适当索引的表上进行单个查询更快了,虽然我一次加载了所有数据,但在这项工作中,我应该使用线程,因为这是我的家庭作业:/