首页 > 代码库 > 多线程实际运用<第七篇>
多线程实际运用<第七篇>
1、单线程采集100个页面
class Program { static int i = 6991275; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); getTitle(); sw.Stop(); Console.WriteLine("采集100个页面完成,用时:" + sw.ElapsedMilliseconds + "毫秒"); Console.ReadKey(); } static void getTitle() { for (int j = 0; j < 100; j++) { WebClient wc = new WebClient(); wc.BaseAddress = "http://www.juedui100.com/"; wc.Encoding = Encoding.UTF8; string html = wc.DownloadString("user/" + ++i + ".html"); Regex reg = new Regex(@"<title>(.*)</title>"); Console.WriteLine(reg.Match(html)); } } }
输出:
2、多线程采集100个页面
class Program { static int i = 6991275; static volatile int k = 1; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 5; i++) { ThreadPool.QueueUserWorkItem(getTitle); } while (true) { if (k == 5) { sw.Stop(); break; } } Console.WriteLine("采集100个页面完成,用时:" + sw.ElapsedMilliseconds + "毫秒"); Console.ReadKey(); } static void getTitle(object o) { while(i < 6991375) { WebClient wc = new WebClient(); wc.BaseAddress = "http://www.juedui100.com/"; wc.Encoding = Encoding.UTF8; string html = wc.DownloadString("user/" + Interlocked.Increment(ref i) + ".html"); Regex reg = new Regex(@"<title>(.*)</title>"); Console.WriteLine(reg.Match(html)); } k++; } }
输出如下:
单纯从执行时间来看,采集100个页面,用5个线程效率提升2倍多,当然这跟带宽也有关系啦。
有问题,好像K++多个线程执行的时候有问题,也要Interlocked.Increment。以后再改、
多线程实际运用<第七篇>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。