1

データの表示方法を決定しようとしています。私が今持っているのは、リピーターに表示される製品のリストです。しかし、コードのメンテナンスのために、製品アイテムを別のユーザーコントロールに入れ、LoadControl を使用してデータベースの結果をループにロードしました。

製品コントロール自体は非常にシンプルで、タイトル、URL、評価などのいくつかのパブリック プロパティのみですが、これがパフォーマンスに影響するかどうかはわかりません。私はこことフォーラムでいくつかの読書をしましたが、特にこれらのコントロールが20または30を超える場合は、ベストプラクティスではないと言う人もいます.

では、この方法を使用すると本当にパフォーマンスが低下するのでしょうか、それとも 1 日あたり約 10.000 ヒットで問題ないのでしょうか。他の提案も大歓迎です。

4

3 に答える 3

2

これにも興味があったのでいくつかテストを行いましたが、通常のクラスをインスタンス化する場合と比較して、LoadControl のパフォーマンスが大幅に低下するようです。

1 つのプロパティを持つ単純なクラスの 100,000 インスタンスと、新しい空白のコントロールをロードする loadcontrol の 100,000 インスタンスの作成をテストしました。また、負荷制御では 1950ms であるのに対し、クラスでは 16ms でした。オーバーヘッドが多いようです。ユーザー コントロールに構成コントロールを追加すると、読み込み時間が長くなることに気付きました。(これは、実際にコントロールをページに追加したりレンダリングしたりしなかった負荷です)

ユーザーの目に留まるだけのヒットですか?loadcontrol で大量のインスタンスをロードしていない限り、おそらくそうではありません。

于 2010-10-12T21:16:05.890 に答える
0

製品ごとに個別のユーザー コントロールを作成するのは、おそらく最善の方法ではないと思います。

しかし、あなたはすでに部分的に私の提案に必要な場所にいます。

ユーザー コントロールで既に定義したすべてのプロパティを使用して、製品のクラスを作成してみませんか。

表示している製品を取得するときは、製品のコレクションを取得し (レコードをループしてコレクションを作成します) (たとえば、リスト)、そのコレクションをリピーターのデータソースとして使用します。

于 2010-10-12T18:54:06.310 に答える
0

Page.LoadControlループ内で使用する場合は、それを独自の関数に分離しますASP.Net。これにより、毎回ディスクからコントロールをロードするのではなく、コントロールをキャッシュするように指示されます。

例: (VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

それで...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

これを関数呼び出し内にカプセル化することで、キャッシュ エンジンはそれが同じユーザー コントロール (実際のユーザー コントロール) であると認識し、ディスクに 1 回だけアクセスするため、処理が大幅に高速化されます。

于 2016-09-21T04:55:04.407 に答える