首页 新闻 会员 周边

求助:WinForm多线程应用

0
悬赏园豆:50 [已关闭问题]

界面上有“开始”和“停止”按钮。当用户点击开始以后,程序就一直处于运行状态。在每天指定的时间点,从一个网页获取30天的数据,写入数据库。


程序结构如下:



private void btn_get_Click(object sender, EventArgs e)
{
    compare();
}

private void compare()
{
   while(1==1)//无限循环
   {
      if (time_Now == time_1)//到达指定时间
      Get();//获取所有OD

   }
}

private void Get()
{
   ……
   DataSet ds= new DataSet();
   DataTable dt = ds.Tables[0];
   int iCount = dt.Rows.Count;
   for (int j = 0; j < 30; j++)//取30天的数据
   {             
      string sDate = DateTime.Now.AddDays(j).ToShortDateString();
      for (int i = 0; i < iCount; i++)//
      {
         string sDepart = dt.Rows[i][0].ToString();//出发城市
         string sArrive = dt.Rows[i][1].ToString();//到达城市
         GetHTML(sDepart,sArrive);
      }
}

private void GetHTML(string sDepart,string sArrive)
{
   //获取网页数据库
   //写入数据库
}

我现在采用的是BackgroundWorker组件,程序可以正常运行。但是由于一天要取20万左右的数据,后台只有一个线程在运行,速度非常慢。
现在希望能用10个线程来从网页获取数据,该怎么实现呢?
希望各位前辈给以指点,刚接触线程,如果前辈能给个线程的框架出来,将不胜感激。

WildFlower的主页 WildFlower | 初学一级 | 园豆:150
提问于:2010-03-08 15:50
< >
分享
其他回答(3)
0

   开10个线程可以,但是速度不能保证就比你现在的速度快。

Ou lei | 园豆:619 (小虾三级) | 2010-03-08 16:27
现在的速度差不多是1小时1万多条,太慢,20万条就得20个小时
支持(0) 反对(0) WildFlower | 园豆:150 (初学一级) | 2010-03-08 17:19
@小方正:以20条数据为例,首先开一个线程获取20条数据,然后采用union的方式拼接sql,一次插入20条。当然你也可以一个线程获取数据,另外一个线程入库,
支持(0) 反对(0) Ou lei | 园豆:619 (小虾三级) | 2010-03-08 17:55
0

楼上说的也是问题。不过你可以这样子吧,抓取网页的使用一个独立线程,只负责数据抓取,抓取回来的数据交给另一个线程,该线程做专属的入库操作。如果二者之间不匹配的话,可以适当调整二者的线程。

西越泽 | 园豆:10775 (专家六级) | 2010-03-08 16:35
阁下能不能给出一个例子?
支持(0) 反对(0) WildFlower | 园豆:150 (初学一级) | 2010-03-08 17:20
0

抓取网页的使用一个独立线程,把数据捉到一个XML, 或队列里面,马上去捉第二个,另一个线程是把抓取回来的数据进行处理, 这样的办法可能会好一点, 处理一条就去掉一条.

风浪 | 园豆:2996 (老鸟四级) | 2010-03-08 17:08
我是从一个网站上获取到html文件,然后再转化为string类型的文件,利用IndexOf的方法解析获得20多个数据。阁下能不能具体一点地说,有实例最好,容易理解
支持(0) 反对(0) WildFlower | 园豆:150 (初学一级) | 2010-03-08 17:16
0

用一些线程抓数据,放到队列中,再用一线程从队列中取数据并写到数据库中。

简单高效。

齐.net | 园豆:1421 (小虾三级) | 2010-03-08 17:09
能给一个实例不?方便理解
支持(0) 反对(0) WildFlower | 园豆:150 (初学一级) | 2010-03-08 17:22
联系我邮箱:matrixdom[at]126.com
支持(0) 反对(0) 齐.net | 园豆:1421 (小虾三级) | 2010-03-09 10:28
@齐.net:我给你发邮件了
支持(0) 反对(0) WildFlower | 园豆:150 (初学一级) | 2010-03-10 07:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册