0


私は現在、Web サイトのプログラミングに関する本を読んでおり、著者は、遅延ロード パターンを使用するように DLL オブジェクトをコーディングすると述べています。概念的には遅延ロードパターンをある程度理解していると思いますが、著者が実装した方法でその有用性を理解しているかどうかはわかりません

ところで - ここで私は一般的に遅延ロード パターンの有用性を求めているわけではありませんが、この特定の本がそれを実装する方法で有用かどうかを尋ねています:


1) とにかく、DLL オブジェクトが作成されると、DB クエリが (DAL 経由で) 実行され、さまざまな列からデータが取得され、DLL オブジェクトのプロパティが設定されます。フィールドの 1 つ (「 L 」と呼びます) にはかなりの量のテキストが含まれている可能性があるため、作成者は、そのプロパティが初めて読み取られたときにのみそのフィールドを取得することにしました。


A) 私たちの状況では、遅延ロード パターンを適用することで正確に何が得られましたか? メモリ使用量が少ないだけですか?


B) しかし一方で、L が他のフィールドとは別に取得される場合、アプリケーションが「 L 」を取得するために Sql Server に追加の呼び出しを行いますが、遅延ロード パターンがなければ、一度にすべてのフィールドを取得するため、Sql Server への呼び出しは 1 回だけで済みます。

ところで – 特定のデータを取得するために大量の計算が必要になる状況では、遅延ロード パターンが非常に有益である可能性があることは認識していますが、上記の例ではそうではありません


ありがとう

4

3 に答える 3

2

L フィールドなしで DLL オブジェクトを使用できる場合 (ほとんどの場合) は意味があります。その場合、L がロードされるのを待っている間、プログラムは利用可能なデータを操作できます。L が常に必要な場合、パターンは単純に複雑になります。特に L の読み込みに時間がかかる場合は、大幅に速度が低下するとは思いません。しかし、それは単なる推測です。遅延読み込みを使用する場合と使用しない場合の両方を記述して、どちらが優れているかを確認してください。

于 2009-07-18T20:02:18.113 に答える
1

これは、正しい列に適用すると非常に便利だと思います。たとえば、データベースにCustomersテーブルがあり、そのテーブルに列CustomerPublicProfileがあるとします。これはかなり大きなテキスト列です。

Customers.aspx顧客のリストを表示する画面 ( と呼びましょう) (ただし、CustomerPublicProfile列は表示されません) がある場合は、その列にデータを入力しないようにしてください。

たとえば、ページに一度に 50 人の顧客が表示される場合、顧客ごとCustomers.aspxに取得する必要はありません。CustomerPublicProfilecolumnユーザーが特定の顧客にドリルダウンすることを決定した場合は、CustomerPublicProfile列を取得します。

B については、はい、これはN 個の余分な呼び出しを行います。ここで、Nはユーザーがドリルダウンすることを決定した顧客の数です。しかし、利点は、そもそも列をスキップすることで余分な不要なオーバーヘッドを大幅に節約できたことです。具体的には、列のMN値を取得することを回避しました。ここで、 Mはページで最初に取得された顧客の数です。CustomerPublicProfileCustomers.aspx

シナリオでMの値がNに近い場合、それは価値がありません。しかし、私が説明した状況では、Mは通常Nよりもはるかに大きいので、意味があります。

サイード・イブラヒム・ハシミ

于 2009-07-18T20:08:35.233 に答える
1

最近、データベースに大きなバイナリ オブジェクトを格納していたときに、このような状況が発生しました。特にオブジェクトがコレクションの一部である場合は特に、DLL オブジェクトが初期化されるたびに、これらを DLL オブジェクトにロードしたくありませんでした。そのため、フィールドの遅延ロードが理にかなっている場合があります。ただし、従うことができる一般的なルールはないと思います。データとそのアクセス方法を知っているからです。データベースへのアクセスを 1 回行い、メモリをもう少し多く使用する方が効率的であると思われる場合は、それを実行する必要があります。

于 2009-07-18T20:16:12.767 に答える