ASP.NET - загрузка данных сетки с тяжелой структурой OO - PullRequest
3 голосов
/ 23 июня 2009

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

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

Вернуть набор записей, специально предназначенный для моей сетки: так я склоняюсь. В принципе, я бы вернул DataSet или просто плоский объект. Моя хранимая процедура может выполнять отношения данных для возврата набора записей по желанию.

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

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

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

1 голос
/ 02 июля 2009

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

НО! Я сделал бы это только в том случае, если сетка доступна только для чтения. Если вам нужно изменить объекты из этой сетки, то у вас получится неловкий слой перевода, который может оказаться не лучшим для производительности. В таком случае я бы лениво загрузил вам доменные объекты. Существуют и другие способы повышения производительности при извлечении данных, например, настройка БД (индексы, проверка фрагментации индексов и т. Д. Просто проверьте план выполнения после написания запроса).

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

...