Отложенная загрузка коллекции объектов

StackOverflow https://stackoverflow.com/questions/618364

  •  03-07-2019
  •  | 
  •  

Вопрос

у меня есть sql-запрос, который может вернуть большое количество строк через DataReader.Только сейчас я запрашиваю базу данных, преобразующую результирующий набор в список (of), и данные привязывают сетку к списку.

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

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

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

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

Редактировать:Как бы в данном случае использовалась подкачка по страницам?

Это было полезно?

Решение

LINQ to SQL, похоже, имеет смысл в вашей ситуации.

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

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

Другие советы

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

Подкачка по страницам может быть вашим лучшим решением.Если вы используете SQL Server 2005 или более поздней версии, была добавлена новая функция. НОМЕР СТРОКИ():

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 .

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top