Заполнение множества элементов управления из базы данных (проблемы архитектуры и производительности) - PullRequest
3 голосов
/ 04 августа 2011

Итак, у меня есть эта страница, которая собирает много информации для создания немного сложного объекта. поэтому я собираю все связанные детали вместе в div, и у меня есть 7 Div, и я заполняю как 20 элементов управления (DropDownListss, CheckBoxLists, Repeaters и т. д.).

Сейчас я просто создаю методы, которые будут вызываться при событиях Click и Page_Load. каждый процесс популяций выполняется отдельно.

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

так, как я могу поместить эту функциональность в лучший дизайн и лучшую производительность, любая помощь здесь =)?

Ответы [ 4 ]

1 голос
/ 05 августа 2011

NHibernate имеет очень приятную функцию под названием NHibernate Futures (но поддерживаются не все базы данных). Вы также можете получить другие преимущества, такие как кэширование из коробки, пакетные запросы записи и так далее. Поэтому я рекомендую рассмотреть этот вариант.

Кстати, вам действительно нужна вся эта информация одновременно на экране? Вы можете разделить ваш слой пользовательского интерфейса и создать, например, мастер.

1 голос
/ 04 августа 2011

Это немного философский вопрос. Что касается страницы перф. идет, вы не должны видеть проблему только с 20 элементами управления. Однако у вас есть два ключевых узких места:

1) Получить из базы данных Вы должны попытаться получить все данные из базы данных одновременно. Конечно, это не всегда возможно, но это сэкономит вам пару поездок. Вы также можете кэшировать этот объект для текущего запроса.

2) Сохранить если вы пишете в db при каждом событии изменения при обратной передаче, это займет слишком много времени. Я бы предложил вам создать свойство Model, которое получает модель из БД, и каждый обработчик изменений меняет эту модель. После того, как все обратные вызовы сработали (я не могу вспомнить лучшее событие сейчас, но я думаю, что Page_Load в порядке), запишите эту модель в базу данных за один раз.

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

1 голос
/ 04 августа 2011

Почему бы не загрузить все эти данные в Page_Load? Затем, попав в память (будь то объекты, устройства чтения данных или наборы данных), заполните ваши элементы управления?

0 голосов
/ 04 августа 2011

Если вы пишете SQL-запросы самостоятельно, вы можете объединить большинство запросов, чтобы вам понадобился только один запрос на таблицу.

например. у вас может быть таблица dropdown_choices, в которой есть столбцы dropdown_id и choice.

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

SELECT * FROM dropdown_choices WHERE dropdown_id IN (1, 2, 3, 10, ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...