問題タブ [lazy-loading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
9139 参照

nhibernate - property-refを使用して非キーフィールドにマッピングするときに、多対1の関係で遅延読み込みが機能しない

NHibernateを使用してマッピングしているレガシーデータベースがあります。対象となるオブジェクトは、アカウントと通知オブジェクトのリストです。オブジェクトは次のようになります。

マッピングファイルは次のようになります。

ただし、次のような基準を作成すると

アカウントが参照されていなくても、各アカウントが読み込まれるSelect N+1のケースが発生します。多対1がレイジープロキシとしてマッピングされているのに、なぜすべてのアカウントが読み込まれるのですか?

0 投票する
3 に答える
7424 参照

.net - NHibernateマッピングのクラス要素に対するlazy="false"の影響は何ですか?

NHibernateを追加して実験しているレガシーシステムを使用しています。テーブルにマップする必要があるクラスがありますが、仮想ではない既存のメソッドがたくさんあります。

マッピングファイルのクラス要素の「lazy」属性を「false」に設定すると、非仮想メソッドが存在する場合でも、NHibernateでマッピングを正常にロードできることがわかりました。これが、このクラスでのNHibernateの使用にどのような影響を与えるのか疑問に思っています。

オブジェクトに属するコレクションでの非遅延読み込みの意味は理解していますが、クラスでの遅延読み込みまたは熱心な読み込みの意味がわかりません。それは、そのオブジェクトに属するすべてのコレクションが熱心にロードされることを意味しますか?それとも、NHibernateが実際のクラスの代わりに動的プロキシを使用しなくなったことを意味しますか?他に何かありますか?

また、ここでの最善の行動方針は何ですか?そのlazy=false値を設定することはお勧めできませんか?クラスが実装するインターフェイスを作成し、それをテーブルにマップする必要がありますか?それとも、弾丸をかじって、クラス仮想の既存のすべてのメソッドにマークを付ける必要がありますか?

アドバイスをよろしくお願いします!

0 投票する
8 に答える
2598 参照

c# - 深く不変な型の遅延初期化にはロックが必要ですか?

私が非常に不変な型を持っている場合 (すべてのメンバーは読み取り専用であり、それらが参照型のメンバーである場合、それらは非常に不変なオブジェクトも参照します)。

次のように、型に遅延初期化プロパティを実装したいと思います。

私が言えることから:

...スレッドセーフです。両方のスレッドが同時に初期化するために競合することについてはあまり心配していません。これはめったにないためです。論理的な観点からは両方の結果が同じであり、ロックがない場合はロックを使用したくないからです。に。

これは機能しますか?長所と短所は何ですか?

編集: 回答ありがとうございます。おそらくロックを使用して先に進みます。しかし、コンパイラが temp 変数が不要であることを認識し、m_PropName に直接代入する可能性を誰も持ち出さなかったことに驚いています。その場合、読み取りスレッドは、構築が完了していないオブジェクトを読み取る可能性があります。コンパイラはそのような状況を防ぎますか?

(回答は、ランタイムがこれを許可しないことを示しているようです。)

編集:そこで、Joe Duffy によるこの記事に 触発された Interlocked CompareExchange メソッドを使用することにしました。

基本的:

これにより、このオブジェクト インスタンスでこのメソッドを呼び出すすべてのスレッドが同じオブジェクトへの参照を取得するようになるため、== 演算子が機能します。無駄な作業が発生する可能性がありますが、これは問題ありません。楽観的なアルゴリズムになるだけです。

以下のコメントにあるように、これは動作する .NET 2.0 メモリ モデルに依存します。それ以外の場合、m_PropName は volatile と宣言する必要があります。

0 投票する
5 に答える
7131 参照

nhibernate - Hibernate での遅延読み込み

顧客に多数の注文が関連付けられている場合。NHibernate を使用して Orders List を遅延ロードするにはどうすればよいでしょうか。

マッピングファイルを設定する必要があるものですか?どんな助けや例も素晴らしいでしょう。

0 投票する
3 に答える
151 参照

database - 取得するアイテムの数を決定する

特定の基準と特定のページング (開始インデックスと必要なアイテム数) を使用して、データベースからアイテムを取得するための遅延リストを作成しています。

リストのインスタンス化時に、マップされたテーブル内のアイテムの総数をカウントして、リストの初期サイズを取得します (リストではアイテムの追加と削除が許可されているため、 initial )

ほとんど機能しますが、フェッチするアイテムの具体的な数を決定するときにいくつかの問題があります。実際、ユーザーに特定のフェッチサイズを指定させます (この例では10としましょう)。

フェッチするアイテムの正確な数を決定するために、現時点では、コレクション内のアイテムの現在のインデックス(データベース テーブルから最後に取得されたもの) にフェッチ サイズ係数を追加します。結果が以下の場合合計数の場合、私は何のアクションも行いません (そしてフェッチは非常に明確に機能します) が、それが合計よりも大きい場合、フェッチする残りのアイテムの計算は失敗します。

実際には、残りのアイテム数を計算するには、コレクション内のアイテムの総数から、現在のインデックス+ 1 (インデックスは 0 から始まる) を引きますが、これはすべての条件で機能するとは限りません。

適切な係数を計算する方法についてのアイデアはありますか? どうもありがとうございました!

0 投票する
2 に答える
874 参照

apache-flex - 何にも割り当てずに getter を呼び出す (遅延読み込み)

Lazy Load Pattern を使用して完全にロードまたは遅延ロードできる DTO があります。ロード方法は、Flex アプリケーションが必要とするものによって異なります。ただし、この DTO は Flex アプリケーション (swf) に送信されます。通常、たとえばコレクションは、呼び出されたときにのみロードされます。ただし、私の場合、コレクションは Flex でのみ呼び出されるため、この場合、.NET 側での実装は明らかに機能しません (Flex がサーバー呼び出しを行う場合を除きます... 私が避けたいこと)。

コレクションのゲッターでは、データがデータベースから取得されます。ASP.NET ページを操作する場合は機能しますが、DTO が Flex に送信される場合は機能しません。

これにどのように対処しますか?DTO を Flex に送信する前に getter を呼び出すことができましたが、それはひどいようです... + getter の呼び出しは、何かに割り当てられている場合にのみ実行できます (コレクションを保持するローカル変数は決して使用されません... )。

0 投票する
2 に答える
903 参照

c# - LINQ2SQL で遅延読み込みを行う最も簡単な方法

私は読み取り専用のデータベースを持っているので、ObjectTracking をオフにしています (したがって、暗黙的に DeferredLoading をオフにしています)。

遅延読み込みを行い、LoadWith<> を使用したくない。

データ自体が必要になる直前に、Linq にリレーションを遅延フェッチするように明示的に指示する最も簡単な方法は何ですか。

例: 単純な dbml 代替テキスト

次のコードがある場合:

完全なクエリを再度作成できることはわかっていますが、より良い方法を一緒に見つけられることを願っています。

0 投票する
2 に答える
1695 参照

c# - c#Ajax遅延読み込み

aspxページに4つのGridViewを設定する必要がありますが、ページの読み込み時にデータテーブルをそのうちの1つにバインドするだけです。ページの読み込み後に他の3つをpupupする必要があります。

誰かがajaxを使用してこれを行うための最良の方法を知っていますか?

現在、3つのGridViewを生成するボタンでjavascriptを使用して__doPostBackを実行していますが、残念ながら、更新パネルを使用している場合でも、これによりページ全体が強制的に読み込まれます。ページをロードし、データテーブルが返されるときにGridViewにデータを入力する必要があります。

どんな提案も大いに評価されるでしょう。