Nazywa się to leniwym ładowaniem, ponieważ jak leniwy człowiek odkładasz zrobienie czegoś, czego nie chcesz. Przeciwieństwem jest Eager Loading, gdzie ładujesz coś od razu, na długo zanim będziesz tego potrzebować.
Jeśli jesteś ciekawy, dlaczego ludzie mogą używać leniwego ładowania, rozważ aplikację, której uruchomienie zajmuje ZA DUŻO czasu. Ta aplikacja prawdopodobnie bardzo chętnie ładuje ... ładuje rzeczy z dysku i wykonuje obliczenia, i to na długo, zanim będzie kiedykolwiek potrzebna.
Porównaj to z leniwym ładowaniem, aplikacja uruchomiłaby się znacznie szybciej, ale wtedy, gdy po raz pierwszy będziesz musiał zrobić coś, co wymaga długiego obciążenia, może wystąpić niewielka przerwa podczas ładowania go po raz pierwszy. Tak więc, przy leniwym ładowaniu, amortyzujesz czas ładowania w trakcie działania aplikacji ... i możesz w rzeczywistości zaoszczędzić na ładowaniu rzeczy, których użytkownik nigdy nie zamierzał używać.
Ładowanie z opóźnieniem to praktyka programistyczna, w której ładujesz lub inicjujesz obiekt tylko wtedy, gdy go potrzebujesz. Może to potencjalnie dać duży wzrost wydajności, zwłaszcza jeśli masz dużo komponentów w swojej aplikacji.
Jak zwykle Wikipedia ma więcej szczegółów.
źródło
Leniwe ładowanie to koncepcja, w której opóźniamy ładowanie jednostki obiektu w punkcie, w którym jej potrzebujemy. Mówiąc prostymi słowami, ładowanie obiektu na żądanie zamiast niepotrzebnego ładowania obiektów. Na przykład, jeśli masz klasę „Customer”, która ma zagregowany obiekt „Orders”. Więc lubisz ładować dane klienta, ale obiekty zamówień, które chciałbyś opóźnić, aż aplikacja będzie tego potrzebować.
Poniżej znajduje się film z youtube, który pokazuje, jak korzystać z leniwego ładowania, jak możemy zaimplementować leniwe ładowanie oraz wady i zalety tego samego.
http://www.youtube.com/watch?v=2SrfdAkwmFo
źródło
wikipedia's Definicja Leniwe ładowanie to wzorzec projektowy powszechnie używany w programowaniu komputerowym do odroczenia inicjalizacji obiektu do momentu, w którym jest to potrzebne. ...
http://en.wikipedia.org/wiki/Lazy%20loading
źródło
Termin leniwe ładowanie jest zwykle używany w przypadku mapowania relacyjnego obiektu. Jeśli używasz ADO.NET bezpośrednio, zawsze uzyskujesz chętny ładowanie (tj. Zawsze ładuje tylko to, co określisz).
Operatory odwzorowania OR, takie jak nHibernate, obsługują zwracanie obiektów proxy, które są „wypełniane” odpowiednimi danymi tylko wtedy, gdy uzyskujesz do nich dostęp. W ten sposób ładujesz tylko te dane, których naprawdę używasz. Jest to przydatna funkcja, gdy określasz wiele relacji między obiektami, które mogą być ładowane z bazy danych, nie chcesz, aby element OR-mapper ładował wszystkie powiązane obiekty i obiekty związane z powiązanymi obiektami i tak dalej. Może to spowodować załadowanie całej bazy danych.
Problemowi temu można zapobiec również poprzez staranne zaprojektowanie modelu obiektu. (używanie agregatów i ładowanie tylko zbiorczych korzeni, jak w projektowaniu opartym na domenie, jest sposobem na obejście tego bez korzystania z leniwego ładowania).
Leniwe ładowanie może spowodować, że program lub mapper będzie wykonywał wiele operacji dostępu do małych baz danych zamiast jednorazowo pobierać wszystkie potrzebne dane. Może to również powodować problemy z wydajnością.
źródło
Oto przykład z prawdziwego kodu Pythona, który napisałem:
Zasadniczo mam klasę Item, która reprezentuje przedmiot w naszym ekwipunku. Łączna liczba posiadanych przez nas przedmiotów to liczba, którą posiadamy, oraz suma wszystkich przedmiotów, które pożyczamy z różnych źródeł. Wszystkie te liczby są przechowywane w naszej bazie danych i nie ma sensu obliczać ich, dopóki nie zostanie faktycznie zażądana suma (ponieważ często pozycje będą używane bez żądania łącznej kwoty).
Tak więc właściwość total sprawdza, czy istnieje pole _total. Jeśli tak się nie stanie, kod właściwości wysyła zapytanie do bazy danych i oblicza ją, a następnie przechowuje wartość w polu _total, aby nie trzeba było jej ponownie obliczać przy następnym żądaniu.
źródło
Leniwe ładowanie: nie marnujesz czasu (ani pamięci) na rzeczy, których możesz nie potrzebować. Potem, kiedy tego potrzebujesz, trwa to dłużej, ale to w porządku.
Przykład z życia: zamiast uczyć się tego francuskiego słownika, uczysz się zwrotów pojedynczo, jeśli są potrzebne. Kiedy to ma sens? Jeśli zamierzasz przebywać we Francji tylko przez krótki czas (tj. Nie będziesz potrzebować wielu zwrotów) lub jeśli musisz wyjechać bardzo szybko. Jeśli jesteś tam przez dwa lata i / lub masz dużo czasu na naukę, o wiele skuteczniejsze może być po prostu nauczenie się całego słownika z góry (szybkie ładowanie).
[Zainspirowany Atomem, jak nauczał w kategoriach gangów Venus w WKRP .]
źródło
Ładowanie z opóźnieniem to termin często używany w bazach danych w odniesieniu do koncepcji ładowania części wymaganych informacji tylko wtedy, gdy jest to potrzebne.
Przypuszczam, że potrzebujesz rekordu, który ma połączenie kilku tabel. Jeśli pobrałbyś to wszystko na raz, zajęłoby to więcej czasu niż gdybyś ściągnął, powiedzmy tylko główną tabelę. Reszta informacji zostanie pobrana tylko wtedy, gdy będzie potrzebna, używając ładowania z opóźnieniem. W niektórych sytuacjach jest to więc „wydajne ładowanie”.
Inne rodzaje „ładowania” to:
źródło
jest wzorcem projektowym.
Ładowanie z opóźnieniem: dopóki kod nie będzie wymagał jakiejś operacji wykonanej przez określony obiekt, obiekt nie jest inicjowany, a po zainicjowaniu nie inicjuje ponownie obiektu, ale używa wcześniej zainicjowanego obiektu.
Dzięki temu kod jest znacznie wydajniejszy i pomaga w zarządzaniu zużyciem pamięci.
Przykładowe zastosowania leniwego ładowania:
Posiadacz wartości inicjalizacji Ghost Lazy
źródło
Niektóre zalety leniwego ładowania:
źródło
Przykładem leniwego ładowania może być siatka lub tabela z dużą ilością danych na stronie internetowej, aby zobaczyć, gdzie aplikacja ładuje tylko taki rozmiar punktu widzenia przeglądarki użytkownika, jaki jest w danym momencie. Kiedy przewijają w dół, aby zobaczyć więcej treści lub danych, w tym momencie zostanie załadowanych więcej danych.
Staje się to coraz bardziej powszechnym wzorcem projektowania wizualnego / interakcji, a także za pośrednictwem ajax lub jQuery.
Jak wspomniano powyżej, przeciwieństwem byłoby Zachłanne ładowanie, w którym nie bierzesz pod uwagę klienta, co potencjalnie może mieć wpływ na wydajność.
źródło
Lazy<T>
jest teraz częścią c # 4.0 - w witrynie MSDN jest ładna strona, która wyjaśnia tę koncepcję.źródło
Według geeksforgeeks, leniwe ładowanie jest wzorcem projektowania oprogramowania, w którym inicjalizacja obiektu następuje tylko wtedy, gdy jest to rzeczywiście potrzebne, a nie wcześniej, aby zachować prostotę użytkowania i poprawić wydajność.
https://www.geeksforgeeks.org/lazy-loading-design-pattern/
źródło