Пример производительности WinForms: создание динамических форм + привязка - PullRequest
0 голосов
/ 14 июня 2011

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

Форма работает так:

У нас есть список (полученный из БД), который определяет, какие элементы управления должны быть созданы с использованием полностью определенных пространств имен. Элементы управления (в основном пользовательские элементы управления) создаются поочередно с помощью отражения и в конечном итоге добавляются в панель на форме. Теперь каждый элемент управления может содержать больше элементов в древовидной иерархии элементов управления.

Каждый элемент управления получает свою собственную инициализацию, и, в конце концов, DataSet присваивается форме (и всем элементам управления) как DataSource, с привязкой данных, добавляемой к каждому из них.

Особенно, в некоторых случаях мы привязываем определенную строку к элементу управления, а не к DataTable / Set. Поэтому ожидайте, что вызовы BindingManager Position определят точную строку и т. Д.

Имея около 30 пользовательских элементов управления, мы получаем прекрасную производительность около 10 секунд, чтобы открыть новую форму, где DataSet едва содержит какие-либо данные. Связывание занимает примерно 3-4 секунды.

В сложном состоянии данных, мы говорим о 30-40 секундах времени открытия, с переплетом занимает примерно половину времени.

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

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

Я бы хотел услышать несколько советов о том, как провести детализацию и найти проблемы с производительностью такого рода, особенно способ разобраться в беспорядке, который состоит из сотен привязок.

1 Ответ

1 голос
/ 14 июня 2011

это время для извлечения всех настроек из БД, берущих порцию?

Reflection -> Emit Reflection, производительность, но кодирование - это pita.

Как насчет разделения процесса строительства на2: 1-й - это просто создание всех элементов, элементы данных будут несвязанными / пустыми

, затем следующий раунд - это часть привязки данных.

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

...