У меня есть загадка.Я «унаследовал» очень плохо спроектированную и очень сложную систему, которую я модернизирую и перестраиваю (со своей командой) по частям.Проблема в том, что текущая система зависит от 200+ пользователей, и у них есть серьезные проблемы с производительностью из-за (отсутствия) дизайна.Наиболее проблематичной проблемой на данный момент является то, что значительный объем работы выполняется в потоке пользовательского интерфейса, что приводит к зависанию графического интерфейса пользователя до тех пор, пока поток не будет очищен, а прокачка сообщений может продолжаться.Большая часть этой работы действительно должна выполняться в потоке графического интерфейса, поскольку он обновляет большое количество полей в сетке из-за других результатов вычислений в других потоках.
Проблема заключается в следующем: у меня нетресурс, который нужно посвятить переписыванию модели потоков и соответствующих классов, а также сложность этой работы привела бы к значительному риску, который неприемлем для моего клиента.
Я хотел бы знать, есть ли у кого-нибудь предложения о том, как сделать пользовательский интерфейс более производительным, не слишком сильно мешая модели потоков в currnet.
Сначала я подумал, что может быть какой-то способпоместить «буфер» перед фактическими вызовами потока UI, чтобы убедиться, что графический интерфейс не перегружен или когда он отменяет отправку к нему.
Любые предложения будут весьмаоценили.
Я знаю, что ничего из этого не является идеальным, но мы находимся там, где мы есть, и я действительно хочу дать своим пользователям лучший опыт до завершения годовой переписывания!
Спасибо!
Обновление # 1 Это приложение winforms ... извините, это не было ясно с самого начала.Новый код - WPF, но эти модули - winforms.
Update # 2 Я думаю, что я могу сначала попытаться изменить большинство вызовов BeginInvoke на поток пользовательского интерфейса на Invoke, вводя сериализацию, которая, будем надеяться,повысить отзывчивость интерфейса.Есть ли здесь (неочевидные) недостатки, которые кто-либо может предвидеть?