Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579

Многопоточность при подсчете значения для ячеек Datagridview

24.10.2014, 16:55. Показов 1276. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день.

Реализовал много поточность для подсчета значений из ячеек. Если нужно подсчитать от 1-6 значений все нормально, но если количество больше то начинает жестоко тормозить, хотя по идеи не должно. Подсчет действует в событии CellValidating datagridview'а.

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
        void FSQDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            //при наличии формул считать
            foreach(ElementListCells Elc in LF.Formulas)
            {
                if (Elc.formula != "")
                {
                    Thread NewThread = new Thread(new ThreadStart(() => returnProf(Elc.position)));
                    NewThread.Start();
                }
            }
        }
 
        private void returnProf( Point Position)
        {
            this[Position.X, Position.Y].Value = consid(ExistIndexPosition(new Point(Position.X, Position.Y)));
            Thread.Sleep(0);
        }
 
        private string consid(SystemQuery.ElementListCells gg)
        {
            string str = "";
 
            SystemQuery.ElementListCells ff = gg;
            FSQ.System.MathematicalFunctions.ConsiderFormula CF = new FSQ.System.MathematicalFunctions.ConsiderFormula();
            //извлекаем все значения для добавления в формулу
            List<double> RG = ReturnValue(ff.arguments);
            //перед тем как отправить формулу на выполнение проверим на наличие функций
            string sf = returnSpecElementFormula(ff.formula);
            str = CF.SharingFormula(sf, ff.arguments, RG);
 
            return str;
        }
Уже переработать несколько вариантов - этот самый оптимальный.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2014, 16:55
Ответы с готовыми решениями:

Наследование от DataGridView. Как задать свои значения по умолчанию для стилей ячеек и др свойств?
Всем привет. Я хочу создать контрол унаследованный от DataGridView. Весь функционал тот же, меняется только стили ячеек и некоторые...

Ошибка #ЗНАЧ при подсчете значения
Приветствую всех. В ячейке A2 есть формула: =ЕСЛИ(A1=1;100;&quot;&quot;). В ячейке A3 другая формула =A2+100. Если в ячейку A1 ввести 1, то все...

При правильном подсчёте получаются значения равные 0
Здравствуйте, друзья. Мучает очень сильно такой вопрос: В цикле(который я отделил пунктирной линией) происходит подсчет некоторых значений...

7
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2014, 17:13
Зачем каждый раз создавать поток на каждую формулу? Почему один не может всё подсчитать?
И вообще не ясно, насколько безопасно такое. Ты создаёшь новый поток не дожидаясь завершения предыдущего, они могут конкурировать при доступе к общим ресурсам, и неизвестно, сколько их работает одновременно, есть лимит на количество потоков.
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
24.10.2014, 17:20  [ТС]
понимаю, что бред. И я не совсем понимаю как оно должно функцианировать(
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2014, 17:24
А без создания потоков никак?

Ну сделай для начала, чтобы поток был один и вычислял все формулы.
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
24.10.2014, 17:31  [ТС]
без потоков ни как, расчеты сложные и грамосткие.

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

Думаю, подумать немного и заняться глобальной оптимизацией, так как сейчас в независимости от того, изменились ли данные производится подсчет значений.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2014, 20:17
Сложные расчёты для современного компьютера? А чем поток-то помогает? С программой можно работать, пока она считает, что ли?
0
79 / 79 / 37
Регистрация: 11.09.2014
Сообщений: 579
24.10.2014, 22:03  [ТС]
нужно. Мой проект - это расширеная версия excel
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.10.2014, 22:41
Да Excel уже некуда расширять.
Если расчёты не фоновые, то проще вывести какое-нибудь сообщение, чтобы пользователь подождал. А так что один поток, что 2 разницы нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.10.2014, 22:41
Помогаю со студенческими работами здесь

Значения ячеек datagridview
Здрасте. Есть необходимость очищать значения ячеек в datagridview, а затем восстанавливать их. С очисткой я разобралась, а вот как...

Сложить значения ячеек в DataGridView
не складывает значения ячеек, не пойму Dim a As Integer Dim d As Integer a = Convert.ToInt32(DataGridView1(0,...

Как суммировать значения ячеек в dataGridView
Помгите разобраться с datagridview c# ... Как сложть элементы в таблице datagridview c# например 1-го и 2-го столбиков?

Подставить в формулу значения из ячеек DataGridView
Доброго времени суток! К сожалению раздела *для маленьких и тупых* не оказалось, поэтому попрошу помощи\совета здесь ;) Ситуация такая:...

Никак не могу понять почему идет ошибка при подсчете среднего значения
Вычислить среднее арифметическое кодов элементов отсортированного массива, имеющих индекс кратный трем. Не коды должны быть кратны 3, а...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru