Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
1

Отзывчивость ПО. Как улучшить?

16.02.2017, 17:22. Показов 612. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть программка, постепенно дополнялась и сейчас некоторые операции (в основном выполнение внешних программ) могут занимать несколько минут. В это время программа практически перестает реагировать на внешние события, попытка переместить окно вообще обречена на провал (у меня не получилось). Так же к примеру если выскочила ошибка (а значить ошибок может быть однотипных много), то проще снять процесс чем закрыть через штатную кнопку закрытия (добавлять меню закрытия в кнопку не хочется, хотя наверняка так можно). Есть ли варианты побороть такое поведение программы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2017, 17:22
Ответы с готовыми решениями:

Как улучшить код?
В Main() код для вызова функции У меня есть много классов которые должны работать через Thread...

Как улучшить код?
Как улучшить? static double Power(double x, int y) { double b = x; ...

Как можно улучшить уровень С#?
Bazile, посоветуйте как можно улучшить уровень С#? я читал просиза, дубцова. Оказалось там нет того...

Системная информация - как улучшить код?
Проблема в том что выходит слишком много foreach, как всё это можно сократить? string savePath =...

11
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
16.02.2017, 17:25 2
Цитата Сообщение от Alexsandr Посмотреть сообщение
Есть ли варианты побороть такое поведение программы?
Разумеется. Надо вынести все трудоемкие операции в отдельные потоки, чтобы они не вешали поток, в котором работает пользовательский интерфейс.
0
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
16.02.2017, 18:12  [ТС] 3
Тогда возможно самое простое решение это запускать в отдельном потоке private void, это возможно?
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
16.02.2017, 18:16 4
Цитата Сообщение от Alexsandr Посмотреть сообщение
самое простое решение это запускать в отдельном потоке private void
Да, но там имеются всевозможные "если".
Например, если в ходе работы вы обновляете пользовательский интерфейс, то из отдельного потока это нужно делать иначе, чем обычно.
0
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
16.02.2017, 18:23  [ТС] 5
Интерфейс не обновляется, вся информация пользователю (кроме ошибок) выдается до вызова private void. Последний собственно по всей видимости (проверить то не могу точно) и грузит основной поток, хотя его работа заключается в создании и ожидании результата выполнения внешних программ. Мне кажется если есть вариант его выноса в "автономное плавание", о это будет вариант. Основная программа будет же дожидаться его завершения? Иначе выполнится все возможно быстрее, но диску и расходу памяти не позавидуешь.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
16.02.2017, 19:15 6
Цитата Сообщение от Alexsandr Посмотреть сообщение
Основная программа будет же дожидаться его завершения?
Ну так это как реализуете.
А так — да, можно и с ожиданием.
0
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
16.02.2017, 23:46  [ТС] 7
Как тогда это сделать? Куда смотреть?
0
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
17.02.2017, 16:20 8
Цитата Сообщение от Alexsandr Посмотреть сообщение
Как тогда это сделать? Куда смотреть
смотреть в класс System.Threading.Thread. Из отдельного потока, к интерфейсу следует обращаться через Invoke, пример:
C#
1
label1.Invoke((MethodInvoker)(() => label1.Text = "новый текст"));
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.02.2017, 01:54 9
iDReeM, уже 10 лет как таски есть...
0
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
18.02.2017, 09:08  [ТС] 10
Что за таски?
0
309 / 317 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
18.02.2017, 10:57 11
Про async await почитайте:
https://habrahabr.ru/post/139734/
https://metanit.com/sharp/tutorial/13.3.php

Добавлено через 42 секунды
Цитата Сообщение от Alexsandr Посмотреть сообщение
Что за таски?
Тогда это рано, начинайте с https://metanit.com/sharp/tutorial/12.2.php
0
11 / 11 / 3
Регистрация: 12.05.2014
Сообщений: 189
13.03.2017, 01:10  [ТС] 12
Что-то туго идет у меня отдельный поток c Threading и прочим. Там же получается у меня вызовы идут на другие void и сведения в текстбокс пишутся, для видимости что не висим (поток главного окна), и в файл записываются а они уже получаются в разных потоках, на что ругается при попытке запустить код в фоне. Как-то подружить их можно? По факту все эти отдельные блоки уже довольно тесно переплетены. Или только ограничить выход для сообщений в главном окне?

Проверил без вывода сообщений на основе async. Работает в фоне нормально, окно программы можно свернуть и развернуть, передвинуть и т.п. Обработку ошибок не проверял. Но как в текстбокс писать можно текущие операции и держать поток в фоне? Я так понимаю как-то нужно передавать из фонового потока в основной, но как?
0
13.03.2017, 01:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2017, 01:10
Помогаю со студенческими работами здесь

Как можно улучшить имеющийся консольный калькулятор
как можно улучшить ? что можно нового добавить? в целях изучение языка:) и как сделать, что когда...

Отзывчивость сайта
Ребята подскажите, пожалуйста, подганяю по сайт по этому медиозапросу, /* 576-768px */и выпирают...

Плохая отзывчивость клавиатуры
Доброго времени суток. Недавно возникла такая проблема: клавиши на ноутбуке срабатывают через раз,...

Как улучшить?
Доброго всем дня. Напилил простую страничку 404. Как вы думаете, как ее можно улучшить, только...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru