Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 24.12.2015
Сообщений: 103
.NET 4.x

Многопоточность. Замедление/уменьшение потоков

18.09.2018, 11:55. Показов 1245. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. написал Аккаунт менеджер для некого сайта, который выполняет действия с аккаунтом.
Для оперирования с большим количеством аккаунтов воспользовался многопотоком, всё бы ничего, но со временем скорость работы значительно падает.
Для наблюдения за работой приложения сделал лог (процедурой, которая инвоком добавляет сообщения в Текстовое поле)

Вот код запуска с кнопки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try
{
       Directory.CreateDirectory(Environment.CurrentDirectory + @"\Reserv Copy\" + DateTime.Now.ToString("dd-MM-yy"));
       string reserv = Environment.CurrentDirectory + @"\Reserv Copy\" + DateTime.Now.ToString("dd-MM-yy");
       string new_file_reserv = reserv + @"\BackUp Accounts " + DateTime.Now.ToString("dd-MM-yy HH-mm-ss") + ".txt";
       string folderToFile = Properties.Settings.Default.ПредПуть;
       File.Copy(folderToFile, new_file_reserv);
}
catch { }
 
dataGridView1.Rows.Clear();
File.WriteAllText(Properties.Settings.Default.ПредПуть, String.Empty);
Thread Run = new Thread(CreatThread);
Run.Start();
dataGridView1.Visible = true;
Вот процедура CreatThread
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
           textBox1.Invoke((MethodInvoker)delegate { textBox1.Text = String.Empty; });
           Cl_List.Accounts1.Clear();
            foreach(var x in Cl_List.Accounts)
            {
                Accounts1.Add(x);
            }
            int i;
           foreach (Thread Th in Cl_List.Thread)
           {
               Th.Suspend();
               Th.Abort();
           }
           Cl_List.Thread.Clear();
            if (Real_Max_THr >= Accounts1.Count)
                Real_Max_THr = Accounts1.Count;
 
           
            for (i = 0; i < Real_Max_THr; i++)
            {
                Thread Run = new Thread(StartS);
                Cl_List.Thread.Add(Run);
            }
 
            foreach (Thread Th in Cl_List.Thread)
           {
                Th.Start();
           }
Процедура StartS
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private void StartS()
        {
            try
            {
                while (Cl_List.Accounts1.Count > 0)
                {
                    try
                    {
                        string[] x = { "" };
                        int i = 0;
                        bool favorit = chFavorite.Checked;
                        bool view_Profiles = chview.Checked;
                        bool messages = chInbox.Checked;
                        int maxmess = Convert.ToInt32(numMaxMess.Value);
                        int real = 0;
                        lock (this)
                        {
                            try
                            {
                                x = Cl_List.Accounts1[0];
                                real = Convert.ToInt16(x[5]);
                                Cl_List.Accounts1.RemoveAt(0);
                            }
                            catch
                            {
                            }
                        }
                        bool ReplProxy = Properties.Settings.Default.ProxyReplace;
                        string proxy = String.Empty;
 
                        if (ReplProxy)
                        {
                            if (Cl_List.Proxy.Count > 0)
                            {
                                proxy = Cl_List.Proxy[0];
                                x[2] = proxy;
                                Cl_List.Proxy.RemoveAt(0);
                            }
                        }
                        Cl_List.Proxy.Add(proxy);
 
                        int maxAllMess = (int)Properties.Settings.Default.MaxAllSend;
                        Manager(x[2], x[0], x[1], x[3], real, Convert.ToInt16(NumCountView.Value), i, Convert.ToInt16(maxPAge.Value), favorit, Convert.ToInt16(MaxCountFavnum.Value), 2, x, Convert.ToInt16(minFreez.Value), Convert.ToInt16(maxFreez.Value), view_Profiles, messages, maxmess, chinbox2.Checked, maxAllMess);
                    }
                    catch { }
                }
            }
            catch { }
        }
В чём может быть проблема? Помогите, Пожалуйста
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2018, 11:55
Ответы с готовыми решениями:

Несанкционированное замедление работы потоков
Здравствуйте! Имеется программа, моделирующая движение некоторых объектов по прямоугольной области. Метод, управляющий движением...

Разработать программу, генерирующую n потоков в пуле потоков CLR
Добрый вечер. Решил поделать старые лабораторные, которые мне уже давно нужно было сдавать, но встрял на одном задании: &quot;Разработать...

Замедление работы программы
Здравствуйте, моя программа вычисляет некоторые значения и рисует точку. Дело в том, что по мере прохода программы, она замедляется. И я не...

2
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
18.09.2018, 14:15
DmitryVL, для начала уберите все конструкции try/catch, а потом исправьте все ошибки, которые будут выводиться во время работы программы.
0
0 / 0 / 1
Регистрация: 24.12.2015
Сообщений: 103
19.09.2018, 16:18  [ТС]
Проблема была решена. Убрал лог, который выводил сообщения о произведённых действиях в TextBox, стал выводить в TXT.
Благодаря этому, нагрузка на ПК сократилась на 95%, при одинаковом количестве потоков, работающих в программе с Логом в файл и в текстовое поле
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2018, 16:18
Помогаю со студенческими работами здесь

Замедление выполнения действий в цикле
Доброго времени суток, господа :) Не нашел такой темы на форуме, поэтому создам свою. У меня есть кнопка, которая в цикле заполняет...

Замедление работы потоков если запущено несколько потоков
Есть отдельный поток который движет красным квадратом. Он каждую миллисекунду меняет положение квадрата на пиксель. Есть другой поток, он...

Многопоточность. Взаимодействие потоков.
Приветствие. Возникла задача напрограммировать многопоточную программу. Вот нарисовал приблизительно как оно должно работать: Thread...

Многопоточность - правильное завершение потоков
Вот первый вопрос: 1) Как завершить заданное количество потоков. Pars - это потомок класса TThread Pars *Thr; - задано глобально. ...

Многопоточность и синхронизация потоков (VS 2012)
код игры тетрис написан на С++/CLI. Стандартное падение фигур и их обрисовка происходит отлично ( реализована в pictureBox), но обработка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru