Пример #1
0
        private System.Collections.Generic.List <string> DeepSearchSitemapParallel(SiteMape sm, System.Collections.Generic.List <string> externalListLinks, System.Boolean flag = false, System.Int32 QUANTITY = 250)
        {
            //local list of links
            System.Collections.Generic.List <string> innerList = new System.Collections.Generic.List <string>();

            if (externalListLinks.Count > QUANTITY)
            {
                QueryLimiter(sm, externalListLinks.ToList <string>(), QUANTITY, innerList);
            }
            else
            {
                ExecuteLimitedQuerys(sm, externalListLinks, innerList);
            }

            listVisitedLinks.AddRange(externalListLinks);
            listVisitedLinks = listVisitedLinks.Distinct().ToList <string>();

            //delete rows that listVisitedLinks has
            innerList = innerList.Except(listVisitedLinks).ToList <string>();

            if (flag == false && innerList.Count > 0)
            {
                innerList.AddRange(DeepSearchSitemapParallel(sm, innerList, flag, QUANTITY).Except(innerList));
                innerList = innerList.Except(listVisitedLinks).ToList <string>();
            }

            return(innerList);
        }
Пример #2
0
        private void ExecuteLimitedQuerys(SiteMape sm, System.Collections.Generic.List <string> externalListLinks, System.Collections.Generic.List <string> innerList)
        {
            //CreateTask(externalListLinks);
            SaveListPageThreadPool(externalListLinks, sm);

            System.Threading.Tasks.Parallel.For(0, externalListLinks.Count, (INDEX) =>
            {
                string address = externalListLinks[INDEX];
                System.Collections.Generic.List <string> temp = Researching(address);
                lock (objForLock)
                {
                    innerList.AddRange(temp.Except(innerList));
                }
            });
        }
Пример #3
0
        private void SaveListPageThreadPool(List <string> list, SiteMape sm)
        {
            if (list.Count == 0)
            {
                return;
            }

            int count = 0;

            System.Threading.Tasks.Parallel.ForEach(list, (page) => {
                List <TimeSpan> lts = new List <TimeSpan>();

                object objLock = new object();

                System.Threading.Tasks.Parallel.For(0, this._amountOfTests, (x) =>
                {
                    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                    sw.Reset();
                    sw.Start();
                    RequestByUrl(page);
                    sw.Stop();
                    lock (objLock)
                    {
                        lts.Add(sw.Elapsed);
                    }
                });

                lock (this._threadLock)
                {
                    count++;
                    this._db.SitePages.Add(new SitePage {
                        SiteMape = sm, NameSitePage = page, TimeMax = lts.Max(), TimeMin = lts.Min(), TimeAverage = new TimeSpan((long)lts.Average(x => x.Ticks)), Number = _counterPages++
                    });
                    if (_counterSave <= count)
                    {
                        this._db.SaveChanges();
                        count = 0;
                    }
                }
            });

            lock (this._threadLock)
            {
                this._db.SaveChanges();
            }
        }
Пример #4
0
        private void CreateSitemapeParallel(SiteAddress sa)
        {
            listVisitedLinks = new System.Collections.Generic.List <string>();

            targetSiteObj = new TargetSITE(sa.UrlAddress);

            SiteMape sm = new SiteMape {
                SiteAddress = sa, NameSateMape = "AUTO_GENERATED"
            };

            this._db.SiteMapes.Add(sm);

            this._db.SaveChanges();



            DeepSearchSitemapParallel(sm, Researching(targetSiteObj.WholeName));

            listVisitedLinks = null;
        }
Пример #5
0
        private int SearchSitePage(List <string> listSiteMap, SiteAddress sa)
        {
            List <TimeSpan> lts = new List <TimeSpan>();
            List <string>   l_s_m;//list site mape
            string          str             = "";
            object          o               = new object();
            int             countFoundPages = 0;

            foreach (string xmlPage in listSiteMap)
            {
                System.Threading.Tasks.Parallel.For(0, this._amountOfTests, (x) =>
                {
                    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                    sw.Reset();
                    sw.Start();
                    str = RequestByUrl(xmlPage);
                    sw.Stop();
                    lock (o)
                    {
                        lts.Add(sw.Elapsed);
                    }
                });

                l_s_m = SearchPattern(str, _httpwebPage, 1);

                if (l_s_m.Count == 0)
                {
                    continue;
                }
                countFoundPages++;
                SiteMape sm = new SiteMape {
                    SiteAddress = sa, NameSateMape = xmlPage, TimeMax = lts.Max(), TimeMin = lts.Min(), TimeAverage = new TimeSpan((long)lts.Average(x => x.Ticks))
                };

                this._db.SiteMapes.Add(sm);
                this._db.SaveChanges();

                SaveListPageThreadPool(l_s_m, sm);
            }
            return(countFoundPages);
        }
Пример #6
0
        private void QueryLimiter(SiteMape sm, System.Collections.Generic.List <string> externalListLinks, System.Int32 QUANTITY, System.Collections.Generic.List <string> innerList)
        {
            int amount = QUANTITY;

            do
            {
                innerList.AddRange(DeepSearchSitemapParallel(sm, externalListLinks.GetRange(0, amount), flag: true));

                innerList = innerList.Except(listVisitedLinks).ToList <string>();

                externalListLinks = externalListLinks.Except(listVisitedLinks).ToList <string>();

                if (amount > externalListLinks.Count)
                {
                    amount = externalListLinks.Count;
                    if (amount <= 0)
                    {
                        break;
                    }
                }
            } while (true);
        }