93

遅延読み込みとは

[いくつかの回答を読んだ後に編集] なぜ人々はこの用語を頻繁に使用するのですか?

ASP/ADO レコードセットを使用して、グリッドビュー用のデータまたは ADO.NET データソースをロードするとします。

なぜ人々が遅延読み込みという用語を使用するのか、彼らの「他の」タイプは何ですか?と尋ねるべきだったと思います。

4

13 に答える 13

227

怠惰な人のように、やりたくないことを先延ばしにするため、遅延読み込みと呼ばれます。反対は Eager Loading で、必要になるずっと前に何かをすぐにロードします。

人々が遅延読み込みを使用する理由に興味がある場合は、起動に非常に長い時間がかかるアプリケーションを考えてみてください。このアプリケーションは、おそらく多くの熱心な読み込みを行っています... ディスクからの読み込み、計算など、必要になるずっと前に実行しています。

これを遅延読み込みと比較すると、アプリケーションははるかに高速に起動しますが、実行時間の長い負荷を必要とする何かを初めて実行する必要がある場合、最初の読み込み中にわずかな一時停止が発生する場合があります。したがって、遅延読み込みを使用すると、アプリケーションの実行中に読み込み時間を分割することになります...そして、実際には、ユーザーが決して使用するつもりのないものを読み込むことから節約できます。

于 2008-08-30T19:44:05.653 に答える
40

Lazy Loading は、オブジェクトが最初に必要になったときにのみオブジェクトをロードまたは初期化するプログラミング手法です。これにより、特にアプリケーションに多数のコンポーネントがある場合、パフォーマンスが大幅に向上する可能性があります。

いつものようにウィキペディアに詳細があります。

于 2008-08-30T19:26:21.687 に答える
14

遅延読み込みは、必要な時点でオブジェクト ユニットの読み込みを遅らせるという概念です。簡単に言えば、オブジェクトを不必要にロードするのではなく、オンデマンドでオブジェクトをロードすることです。たとえば、「Orders」オブジェクトが集約された「Customer」クラスがあるとします。したがって、顧客データをロードしたいのですが、アプリケーションが必要になるまで注文オブジェクトを遅らせたいとします。

以下は、遅延読み込みの使用方法、遅延読み込みの実装方法、および遅延読み込みの長所と短所を示す YouTube ビデオです。

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

于 2013-09-14T05:48:08.900 に答える
9

ウィキペディアの定義 遅延読み込みは、コンピューター プログラミングで一般的に使用される設計パターンであり、必要になるまでオブジェクトの初期化を延期します。...

http://en.wikipedia.org/wiki/Lazy%20読み込み中

于 2008-08-30T19:21:21.747 に答える
7

遅延読み込みという用語は、通常、オブジェクト リレーショナル マッパーについて話すときに使用されます。ADO.NET を直接使用すると、常に熱心な読み込みが行われます (つまり、常に指定したものだけが読み込まれます)。

nHibernate のような OR マッパーは、データにアクセスした場合にのみ、適切なデータで「埋められる」プロキシ オブジェクトを返すことをサポートします。そうすれば、実際に使用するデータのみをロードできます。これは、データベースからロードできるオブジェクト間の多くの関係を指定する場合に便利な機能です。OR マッパーにすべての関連オブジェクトと関連オブジェクトに関連するオブジェクトをロードさせたくない場合などです。その結果、データベース全体がロードされる可能性があります。

この問題は、オブジェクト モデルを慎重に設計することでも防ぐことができます。(ドメイン駆動設計のように集約を使用して集約ルートのみをロードすることは、遅延読み込みを使用せずにこれを回避する方法です)。

遅延ロードを行うと、またはマッパーが、必要なすべてのデータを一度に取得するのではなく、多数の小さなデータベース アクセスを実行することになります。これにより、パフォーマンスの問題も発生する可能性があります。

于 2008-08-30T21:36:29.753 に答える
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

基本的に、インベントリ内のアイテムを表す Item クラスがあります。私たちが持っているアイテムの総数は、私たちが所有している数に、さまざまなソースから借りているすべてのアイテムの合計を加えたものです。これらの数値はすべてデータベースに保存されており、合計が実際に要求されるまでこれを計算しても意味がありません (多くの場合、合計が要求されずにアイテムが使用されるため)。

したがって、total プロパティは _total フィールドが存在するかどうかをチェックします。そうでない場合、プロパティ コードはデータベースにクエリを実行して計算し、次に要求されたときに再計算する必要がないように、値を _total フィールドに格納します。

于 2008-08-30T19:35:22.273 に答える
4

遅延読み込み: 必要のないもので時間 (およびメモリ) を無駄にすることはありません。その後、必要なときに時間がかかりますが、それで問題ありません。

実例: フランス語の慣用句を実際に学習する代わりに、必要に応じてフレーズを 1 つずつ学習します。これはいつ意味がありますか?フランスに短期間しか滞在しない場合 (つまり、多くのフレーズは必要ありません)、またはすぐにフランスを離れる必要がある場合。2 年間そこにいる場合、および/または勉強する時間が長い場合は、前もってフレーズブック全体を学習する方がはるかに効率的かもしれません (熱心な読み込み)。

[ WKRP で Venus によってギャング用語で教えられた Atom に触発されました。]

于 2009-07-22T01:15:41.223 に答える
3

はデザインパターンです。

遅延読み込み: コードで特定のオブジェクトによる操作が必要になるまで、オブジェクトは初期化されません。初期化されると、オブジェクトは再初期化されず、以前に初期化されたオブジェクトが使用されます。

これにより、コードがはるかに効率的になり、メモリ使用量の管理に役立ちます。

遅延読み込みの適用例:

Ghost Lazy 初期化値ホルダー

于 2009-07-22T00:56:53.517 に答える
2

遅延読み込みの例としては、Web ページ上に大量のデータを含むグリッドまたはテーブルがあり、その時点でユーザーのブラウザーの視点のサイズをアプリケーションが読み込む場所のみを表示します。より多くのコンテンツまたはデータを表示するために下にスクロールすると、その時点でより多くのデータがビューに読み込まれます。

これは、ajax や jQuery を介した場合と同様に、より一般的なビジュアル/インタラクション デザイン パターンになりつつあります。

そして、前述のように、反対に、クライアントを考慮しない Eager Loading があり、パフォーマンスが低下する可能性があります。

于 2012-02-26T18:46:54.723 に答える
1

Lazy<T>は現在、c# 4.0 の一部です。MSDNには、概念を説明する素敵なページがあります。

于 2009-11-03T21:31:38.817 に答える