2008-08-30 2 views
68

Что такое Lazy Загрузка?Что такое Lazy Загрузка?

[Изменить после прочтения нескольких ответов] Почему люди часто используют этот термин?

Скажите, что вы просто используете набор записей ASP/ADO и загружаете его данными или источником данных ADO.NET для gridview.

Думаю, я должен был спросить, почему люди используют термин «Ленивый Загрузка», какие «другие» типы являются их?

ответ

180

Это называется ленивой загрузкой, потому что, как ленивый человек, вы откладываете выполнение чего-то, чего не хотите. Противоположность - Eager Loading, где вы загружаете что-то сразу, задолго до того, как оно вам понадобится.

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

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

+8

Отличное объяснение. – Christian 2011-06-16 10:10:37

+16

+1 для сравнения с "Eager Loading" – 2011-09-14 19:00:11

10

wikipedia Определение Lazy loading - это шаблон проектирования, обычно используемый в компьютерном программировании для отсрочки инициализации объекта до тех пор, пока он не понадобится. ...

http://en.wikipedia.org/wiki/Lazy%20loading

35

Ленивая Загрузка является практикой программирования, в котором вы только нагрузки или инициализировать объект при первом нужно. Это потенциально может дать вам большой прирост производительности, особенно если у вас много компонентов в вашем приложении.

Как обычно, Wikipedia имеет более подробную информацию.

5

Вот пример из некоторого фактического кода Python Я написал:

class Item(Model): 
    ... 
    @property 
    def total(self): 
     if not hasattr(self, "_total"): 
      self._total = self.quantity \ 
        + sum(bi.quantity for bi in self.borroweditem_set.all()) 
     return self._total 

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

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

6

Термин «ленивая загрузка» обычно используется, когда речь идет об объектных реляционных картографах. Если вы используете ADO.NET напрямую, вы всегда получаете активную загрузку (т.е. она всегда загружает только то, что вы указываете).

OR-mappers, такие как поддержка nHibernate, возвращающая прокси-объекты, которые получают «заполненные» соответствующими данными только при доступе к данным. Таким образом, вы загружаете только те данные, которые вы действительно используете.Это полезная функция, когда вы указываете много отношений между объектами, которые могут быть загружены из базы данных, вы не хотите, чтобы OR-mapper загружал все связанные объекты и объекты, связанные с связанными объектами, и так далее. Это может привести к загрузке всей вашей базы данных.

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

Lazy loading может привести к тому, что или mapper сделает много небольших доступов к базе данных вместо того, чтобы извлекать все данные, которые вам нужны один раз. Это также может привести к проблемам с производительностью.

3

это шаблон дизайна.

Lazy loading: до вашего кода требуется некоторая операция, выполняемая определенным объектом, объект не инициализирован, и после его инициализации он не повторно инициализирует объект, а использует ранее инициализированный объект.

Это делает ваш код намного более эффективным и помогает управлять использованием памяти.

Пример применения отложенной загрузки:

Призрачные Ленивый инициализация держателя Значение

4

Ленивая загрузка: вам не нужно тратить свое время (ни память) с вещами, вы, возможно, не нужно. Тогда, когда вам это нужно, это занимает больше времени, но это нормально.

Пример из жизни: вместо того, чтобы действительно изучать французский разговорник, вы изучаете фразы по одному, поскольку они необходимы. Когда это имеет смысл? Если вы будете только во Франции на короткое время (т. Е. Вам не понадобится много фраз), или если вам нужно уйти очень скоро. Если вы там уже два года и/или у вас есть много времени на учебу, тогда было бы намного эффективнее всего изучить весь разговорник (с нетерпением).

[Вдохновленный Atom as taught in gang terms by Venus on WKRP.]

4

Ленивая загрузка термин часто используется в базах данных для обозначения понятия погрузочных частей требуемой информации только тогда, когда это необходимо.

I.e. предположим, что вам нужно иметь запись, в которой есть несколько таблиц. Если вы выберете все сразу, это займет больше времени, чем если бы вы получили только основную таблицу. Используя ленивую загрузку, остальная часть информации будет извлечена только в случае необходимости. Таким образом, это фактически «эффективная загрузка» в определенных сценариях.

Другие типы «загрузка» является:

  1. Нетерпеливый Загрузка - Загрузка всех подключенных таблиц одновременно.
1

Lazy<T> теперь является частью C# 4.0 - есть хорошая страница на MSDN который объясняет концепцию.

1

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

Это становится скорее общим шаблоном проектирования визуальных/взаимодействий, а также через ajax или jQuery.

И, как уже упоминалось выше, противоположность была бы Eager Loading, если вы не принимаете на себя внимание клиента, что потенциально может иметь удар производительности.

10

Lazy loading - это концепция, в которой мы задерживаем загрузку единицы объекта в том месте, где оно нам нужно. Вставка простых слов по требованию, а не загрузка объектов без необходимости. Например, если у вас есть класс «Клиент», который имеет агрегированный объект «Заказы». Таким образом, вам нравится загружать данные клиента, но объекты заказов, которые вы хотели бы задержать, пока ваше приложение не потребует его.

Ниже представлено видео с YouTube, в котором показано, как использовать ленивую загрузку, как мы можем реализовать ленивую загрузку, а также преимущества и недостатки того же самого.

http://www.youtube.com/watch?v=2SrfdAkwmFo

2

Некоторые из преимуществ отложенной загрузки:

  1. Минимизирует время запуска приложения.
  2. Приложение потребляет меньше памяти из-за нагрузки по требованию.
  3. Избегайте ненужного запроса на сервер.