7

Как увеличить скорость сбора в разы ?

Если делаю дополнительные потоки с Algoritm2 Algoritm3 и т.д.

То такое ощущение, что скорость распределяется, а не увеличивается.

При этом мощности компьютера и интернет канала полно...

UPD: Не асинхронно, а отдельными потоками в которых всё будет синхронно

using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ParsingImena
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }



        private void Form1_Load(object sender, EventArgs e)
        {

            var algoritm1 = new Task(Algoritm1);
            algoritm1.Start();

        }// Загрузка формы



        private string PoluchitImya(string nomerStranici)
        {
            System.Net.WebClient wc = new System.Net.WebClient();

                String Response = wc.DownloadString("https://site.com/" + nomerStranici);
                String Rate = System.Text.RegularExpressions.Regex.Match(Response, @"itemprop=""name"">([^<]+)</").Groups[1].Value;
                return Rate;

        }// Получение имени



        private void Algoritm1()
        {

            for (int i = 1; i < 100000; i++)
            {

                string nomerStranici = i.ToString();
                string r = PoluchitImya(nomerStranici);
                BeginInvoke(new InvokeDelegate(pisanina), r);
                BeginInvoke(new InvokeDelegateLable1(pisaninaLable1), i);

            }

        }// Алгоритм работы 1


        #region Делегаты

        public delegate void InvokeDelegate(string r);
        public void pisanina(string r)
        {
            if (r != "")
            {
                File.AppendAllText("log.txt", r + Environment.NewLine);
            }

        }


        public delegate void InvokeDelegateLable1(int i);
        public void pisaninaLable1(int i)
        {
            label1.Text = i.ToString();
        }

        #endregion

    }
}
Xzizz
  • 1,592
  • 1
  • найти узкое место 2) ускорить узкое место. Ну и грузить странички асинхронно, а не последовательно
  • – tym32167 Dec 02 '17 at 00:13
  • @tym32167 можете показать пример с 2-мя потоками ? Как найти это узкое место ? – Xzizz Dec 02 '17 at 00:15
  • не многопоточно, асинхронно. Смотрите как асинхронно качать сайты. Про узкое место - это можно сделать с профайлером. Код пка нет возможности писать, примеры не могу прислать – tym32167 Dec 02 '17 at 00:19
  • 1
    Если не ошибаюсь, дело в ограничении количества одновременных соединений. Гуглите по словам "c# webclient connection limit" для подробностей. В частности: 1, 2, 3, 4. – Alexander Petrov Dec 02 '17 at 10:20
  • 1
    @AlexanderPetrov спасибо что не прошли мимо. Решила мою проблему ваша ссылка с цифрой 1 и оттуда строка System.Net.ServicePointManager.DefaultConnectionLimit = 20; – Xzizz Dec 02 '17 at 10:54