首页 新闻 会员 周边 捐助

C#如何避免程序卡死

0
[已解决问题] 解决于 2014-09-19 15:05

嵌套了两个foreach循环,总共大概要循环60000次,到20000多次的时候程序直接结束了,记录异常日子的表中也没有问题,求大神指点下

                var categories = ctx.Sync_Categorys;
                foreach (var cateogry in categories)
                {
                    var boards = ctx.Sync_Boards.Where(b => b.CategoryID == cateogry.CategoryID);
                    foreach (var board in boards)
                    {
                        string address = string.Format("http://shouji.baidu.com/software/list?cid={0}&boardid={1}&page_num={2}", cateogry.CategoryID, board.BoardID, 1);
                        //根据第一页的信息获取当前子分类的页面数量
                        var shtml = WebUtils.GetUrlOutput(address, Encoding.UTF8);
                        if (!string.IsNullOrEmpty(shtml))
                        {
                            HtmlDocument doc = new HtmlDocument();
                            doc.LoadHtml(shtml);
                            HtmlNode rootnode = doc.DocumentNode;
                            //页面数量的XPath
                            var xpath = @"//*[@id='doc']/div[3]/div[2]";
                            HtmlNodeCollection items = rootnode.SelectNodes(xpath);
                            if (items != null && items.Count > 0)
                            {
                                //获取到某个分类下的App的页面数量
                                int pagenum = int.Parse(items[0].OuterHtml.Split('\"')[3].Trim());
                                for (int i = 1; i <= pagenum; i++)
                                {
                                    if (shtml.IndexOf("app-box") > 0)
                                    {
                                        string addressurl = string.Format("http://shouji.baidu.com/software/list?cid={0}&boardid={1}&page_num={2}", cateogry.CategoryID, board.BoardID, i.ToString());
                                        //每一个页面对应一个addressurl
                                        var shtmls = WebUtils.GetUrlOutput(addressurl, Encoding.UTF8);
                                        //调用抓取App的方法,循环抓取
                                        SyncAppBase(ctx, shtmls, board.BoardID);
                                    }
                                }
                            }
                        }
                    }
                }
混沌战士的主页 混沌战士 | 初学一级 | 园豆:171
提问于:2014-09-12 14:02
< >
分享
最佳答案
0

可以参考下C#多线程的章节,学习学习就可以了,这种卡死不是真卡死,是ui卡死,你可以将这部分放到单独的线程中,然后保持同ui的通信就可以了

奖励园豆:5
TomWang | 初学一级 |园豆:157 | 2014-09-12 16:22
   case 4:
                        Console.WriteLine("服务正在同步APP详情......");
                        Thread td2 = new Thread(delegate()
                        {
                                SyncBussiness.Instance.GetAllSyncAppDetail();
                                Console.WriteLine("数据!");
                        });
                        Thread t3 = new Thread(delegate()
                        {
                                SyncBussiness.Instance.GetAllSyncAppDetail();
                                Console.WriteLine("数据!");
                        });
                        t3.Start();
                        td2.Start();
                        Console.WriteLine("同步App详情成功!");
                        break;

想让2个线程都做一件事情,但是线程根部不执行,为何啊

混沌战士 | 园豆:171 (初学一级) | 2014-09-12 16:38
其他回答(7)
0

是不是内存爆了?

XiaoFaye | 园豆:3087 (老鸟四级) | 2014-09-12 14:29

不知道啊

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-12 14:37
0

60000 多次也不是很多的样子,你可以开多线程啊。

BestNow | 园豆:212 (菜鸟二级) | 2014-09-12 14:29

怎么开啊

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-12 14:38
0

呵呵  爬取别人网站内容一定是要异步多线程的啊

你在读取远程页面和分析页面这两步都很慢的

王者永乐 | 园豆:29 (初学一级) | 2014-09-12 14:56

具体该怎么做才好啊

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-12 15:27
0

明显的异步,多线程,后台线程等干的事了。想让你的程序响应,耗时的事情后台慢慢做就是了。

幻天芒 | 园豆:37207 (高人七级) | 2014-09-12 15:06

大神,具体该怎么弄啊,求指导啊

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-12 15:28

@混沌战士: 楼下也说了,?Thread,Aysnc backgroudworker,拿这些去搜索一下,代码一大顿。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2014-09-12 16:36
0

Thread ,backgroundworker

+小马哥++ | 园豆:906 (小虾三级) | 2014-09-12 16:24
0

异步。

Firen | 园豆:5385 (大侠五级) | 2014-09-12 18:35
0

异步多线程干吧

wongdavid | 园豆:394 (菜鸟二级) | 2014-09-16 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册