С двумя вложенными сеточными представлениями с большими наборами данных, каждый из которых является наиболее оптимизированным способом реализации - PullRequest
0 голосов
/ 01 сентября 2009

Скажем, у меня есть 2 таблицы в базе данных, каждая из которых содержит 100 000 строк в деталях и 10 000 строк в основных 5 столбцах, правильно проиндексированных и связанных. Я хочу иметь мастер / деталь вложенных видов сетки. Какую быструю архитектуру я мог спроектировать в .net для этого? Наибольший набор результатов на главном может быть в тысячах (обычно в десятках, хотя), а детализация на записи может быть в сотнях (хотя обычно в однозначных цифрах). Я хотел бы иметь возможность отображать всех мастеров, если это возможно.

1 Ответ

2 голосов
/ 01 сентября 2009

Нижняя строка: привязать к DataReaders, использовать Repeaters вместо GridViews и выключить ViewState.

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

Если это только для отображения и вам нужна абсолютно быстрая архитектура для Asp.Net, вы должны получить IDataReader для каждого сегмента данных (основного и дочернего), отсортированного так, чтобы вы могли вручную сопоставлять дочерние записи при чтении обоих наборы результатов только в прямом направлении. (См. Скотт Митчелл Почему я не использую DataSets в своих приложениях ASP.NET , чтобы узнать подробности о производительности DataReader - если вы не оптимизируете преждевременно , это довольно хороший совет.)

Вместо использования GridView, я бы использовал Repeater, который имеет меньше накладных расходов и позволяет писать более компактный HTML (для меньшей полезной нагрузки для клиента): привязать мастер IDataReader к этому повторителю. (Я не уверен, что вы имели в виду элемент управления GridView или просто концептуальную сетку - базовая архитектура была бы такой же для GridView)

Затем добавьте обработчик к Repeater.ItemDataBound, который проверяет, совпадает ли текущая запись считывателя дочерних данных. Если это так, вручную визуализируйте ваши подробные данные для этой основной записи.

Наконец, вам также следует отключить ViewState, по крайней мере, для Repeater (желательно для максимально возможной части страницы), чтобы, таким образом, полезная нагрузка HTML была меньше.

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

...