Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中使用相同方法的动态线程_C#_Multithreading - Fatal编程技术网

C# c中使用相同方法的动态线程

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++) {

在我的示例中,我尝试使用多个线程在数据库中搜索一个数字。我动态地创建线程,但在我的代码中,它看起来只有最后一个线程可以工作。我创建线程或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++)
            {
                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实现。没有什么比在具有适当索引的表上进行单个查询更快了,虽然我一次加载了所有数据,但在这项工作中,我应该使用线程,因为这是我的家庭作业:/