Ленивая загрузка на коллекцию объектов - PullRequest
0 голосов
/ 06 марта 2009

У меня есть SQL-запрос, который может вернуть большое количество строк через DataReader. Просто сейчас я запрашиваю БД, преобразую результирующий набор в список (из) и данные связывают грид со списком.

Это может привести к тайм-ауту из-за размера набора данных.

В настоящее время у меня есть три настройки, когда пользовательский интерфейс действует в списке объектов на бизнес-уровне.

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

В настоящее время я использую Visual Studio 2005, .NET 2.0

РЕДАКТИРОВАТЬ: Как пейджинг будет использоваться в этом случае?

Ответы [ 3 ]

1 голос
/ 06 марта 2009

LINQ to SQL, кажется, имеет смысл в вашей ситуации.

В противном случае, если по какой-либо причине вы не хотите использовать LINQ to SQL (например, вы используете .NET 2.0), рассмотрите возможность написания итератора, который читает DataReader и преобразует его в соответствующий объект:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}
0 голосов
/ 08 марта 2009

Пейджинг может быть вашим лучшим решением. Если вы используете SQL Server 2005 или выше, была добавлена ​​новая функция. ROWNUMBER () :

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

Существует пример Дэвида Хейдена, который очень полезен при демонстрации SQL.

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

0 голосов
/ 06 марта 2009

Вам нужно вернуть все данные сразу? Вы могли бы рассмотреть пейджинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...