Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 18.04.2019
Сообщений: 12

О скорости выполнения

08.05.2019, 09:01. Показов 2997. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мы имеем: форму со множеством контролов, часть из которых находится в панелях и
метод скрывающий/показывающий(в зависимости от состояния чекбокса) определенные контролы(PictureBox) на форме.
Кликните здесь для просмотра всего текста

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
        
private void HideUsersCheck_CheckedChanged(object sender, EventArgs e)
        {
            if (HideUsersCheck.Checked)
                
            {       
                foreach (Control C in this.Controls)
                {
                    if (C.GetType() == typeof(System.Windows.Forms.Panel))
                    {
                        foreach (Control K in C.Controls)
                        {
                            if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                            { K.Visible = false;}
                        }
                    }
                }        
                foreach (Control K in this.Controls)
                {
                    if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                    {K.Visible = false;}
                }
                textBox1.Text = progressBar1.Value.ToString();
            }
            else
            {
                pictureBox99201.Visible = true;
                foreach (Control C in this.Controls)
                {
                    if (C.GetType() == typeof(System.Windows.Forms.Panel))
                    {
                        foreach (Control K in C.Controls)
                        {
                            if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                            { K.Visible = true; }
                        }
 
                    }
                }
                foreach (Control K in this.Controls)
                {
                    if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                    { K.Visible = true; }
                }
            }
        }


метод работает исправно, но выполняется очень уж долго,на моей машине на сокрытие пикбоксов уходит около 15 сек,
при этом раскрытие происходит почти мгновенно.

на данный момент всего на форме 714 скрываемых элементов.
опытным путём было выявлено что львиная доля времени(14 сек) уходит на выполнение этой части

C#
1
2
3
4
5
6
                
foreach (Control K in this.Controls)
                {
                    if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                    {K.Visible = false;}
                }
и это при том что кусок затрагивает всего 54 элемента, т.е. остальные 660, которые расположены в панелях скрываюся за секунду.
Внимание - вопрос!
Почему этот код
C#
1
2
3
4
5
6
7
8
9
10
11
foreach (Control C in this.Controls)
                {
                    if (C.GetType() == typeof(System.Windows.Forms.Panel))
                    {
                        foreach (Control K in C.Controls)
                        {
                            if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                            { K.Visible = false;}
                        }
                    }
                }
выполняется быстрее вот этого
C#
1
2
3
4
5
foreach (Control K in this.Controls)
                {
                    if (K.GetType() == typeof(System.Windows.Forms.PictureBox))
                    {K.Visible = false;}
                }
и как можно ускорить выполнение последнего?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2019, 09:01
Ответы с готовыми решениями:

Откуда такая разница в скорости выполнения кода?
Добрый день! Очень хочется понять, почему происходит следующее: Пишу код, который собирает данные из нескольких таблиц в одну, затем в...

Оптимизация скорости выполнения
Нахожусь в процессе написания проги для определения СЕО-параметров сайта. Программа разбита на функции, каждая из которых определяет свой...

Разница в скорости выполнения, итераторы
Википедия for (ContainerType::iterator it = C.begin(),end = C.end(); it != end; ++it) { std::cout << *it << std::endl; } ...

22
Фрилансер
805 / 312 / 148
Регистрация: 13.02.2019
Сообщений: 1,071
08.05.2019, 19:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Halsyon Посмотреть сообщение
где можно больше узнать об этом?
О чем именно? О работе с WinAPI? У меня где то была книга по этой теме... Сейчас название не вспомню. Попозже найду и отпишусь как называется.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
08.05.2019, 20:42
Цитата Сообщение от asn31337 Посмотреть сообщение
Вызов функции LockWindowUpdate из библиотеки user32.dll. В первом случае передается указатель на окно, во втором случае пустой указатель. С самой функцией не знаком. Насколько я понимаю, она блокирует перерисовку окна, указатель на который передан в параметре
Описание в целом верное, только вместо указатель здесь правильнее использовать термин "дескриптор".

Добавлено через 1 минуту
Цитата Сообщение от Halsyon Посмотреть сообщение
где можно больше узнать об этом?
О функции LockWindowUpdate подробнее можно прочитать в официальной документации - https://docs.microsoft.com/en-... ndowupdate
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,869
09.05.2019, 08:56
Цитата Сообщение от Halsyon Посмотреть сообщение
где можно больше узнать об этом?
Тыц
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2019, 08:56
Помогаю со студенческими работами здесь

Оптимальность кода по скорости выполнения
Есть код: using System; using Examples.Collections; namespace Examples.Collections.Generic { //Односвязный линейный...

Оптимизация скорости выполнения запроса
имею запрос :) вернее он имеет меня:) цикл в цикле получился ВЫБРАТЬ ПродажиОбороты.Номенклатура, ...

Повышение скорости выполнения запросов.
Привет, All! Вот что интересно: есть некая строка запроса, которая в Access'97 выполняется ~10 сек, а на ASP - минуту-две. ...

Замедление скорости выполнения хранимой процедуры
Уважаемые Експерты FireBird! У меня есть проблема, связанная с замедлением скорости выполнения одной и тойже хранимой процедуры, которая...

Замер скорости выполнения участка кода
Нужно замерить скорость выполнения кода в рабочем проекте. Проблема дополняется тем что код нельзя вызвать несколько раз подряд, т.к....


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru