2009-08-17 10 views
6

を制御します。ほとんどのページには約10〜20のユーザーコントロールが含まれています。ユーザーコントロールは、タブコントロールの各タブなどの細かい粒度で、内容がユーザーコントロール内にあるものの、ビジネスオブジェクトの視覚的な表示になります(意味がある場合)。プロジェクト自体には200を超えるユーザーコントロール(ascxファイル)があります。ASP.Net過度の使用は、私は広範囲に各ページにユーザーコントロールを使用してasp.netのWebアプリケーションを調査してい

アプリケーションのパフォーマンスが非常に悪い(と私が調査していた理由)です。各イベント(クリックやドロップダウンの選択など)は、ページが読み込まれるまでに約5秒かかります(ビジュアルスタジオでは10秒)。このアプリケーションにはAjaxを使用していません。

aspxページ自体がコードビハインドにコードを持たないため、ユーザーコントロールがこれをすべて調べるため、トレースは苦痛です。そのため、単一ページをトレースするには、そのページにあるすべてのユーザーコントロールにトレースステートメントが必要です。

私は実際にそのビジネスコードの後に​​、各ユーザーコントロールの外観を有し、かつ再利用可能なものだと思いますが、スマートなアイデアですが、ユーザーコントロールの過度の使用は、パフォーマンスヒットが発生することが起こっていますか?これは強力なWinFormsバックグラウンドを持つ人が書いたasp.netアプリケーションの構造のようですか?

EDIT
は、各ユーザーコントロールが接続する(私は、ユーザーコントロール(あるいは量)の使用に疑問を投げかけていないよということを付け加えなければならないと思ったが、すべてが物事を成し遂げるというページにこれほど多くの持つ単純にするかどうかデビッドMcEwingがいることを言及@ただ一つのユーザーコントロールpostsbackは、どのような他のすべての処理については、何かをする場合は例えばデータベース)は、一般的に、例えば...パフォーマンスの問題が発生します、...一部が表示され、一部ではありません彼は、などを行って40の最適化されたユーザーコントロールを持っていたが、開発者はそれらがどのようにしてください各1が最適化されていることを確認しようとしている、ベースのWinFormsまたは「asp.netに精通していない」であった場合...

EDIT2
異なるユーザーコントロールは、例えば、一般的に保存されていないデータを必要とするSQL文のトレースを取得した後、データの同じ呼び出しはイベントごとにページの呼び出しごとに5~6回実行されています(上記の)タブ内の各ユーザーコントロールは、データベースからオブジェクトを取り込むために同じ呼び出しを行います...私は本当にユーザーコントロールが問題であると非難するためにここにいません(質問を削除する必要がありますか?)。ユーザーコントロールではありませんが、この特定のケースではそれらを使用しています...私は過度だと信じています!

+0

パフォーマンスはその時点では関係ありません。効果的なのは、ページ上のすべてのコントロールを持つのと同じです。実際の問題は、ページが行う作業の量だけです。これが唯一のパフォーマンス上の考慮事項です。 UserControlにあるかどうかは関係ありません。 –

+0

ユーザーコントロールについて何もできない場合は、カスタムコントロールの一部に変換することができますか?プリコンパイルが役立つかどうかは分かりませんが、単なる考えです。 – johnofcross

答えて

8

10〜20(または数百もの)ユーザーコントロールだけではそれほど簡単です。コントロール自体の存在、カプセル化の考え方は、あなたの問題の原因ではありません。

それは問題が実際にコースのアプリケーションをプロファイリングすることなく、ですが、私の経験に基づいて、私はこれを言うことができるかを正確を言うことは不可能です:

可能性が高い事業の特定の実装では何各ユーザーコントロール内のロジックが不良です。あなたが説明する限り、ポストバックを取ることで、各コントロールはおそらくDALに、各リクエストのそれ自身のデータを振り返ります。これは二つのことによって軽減することができます:明示的(通常は下位レベルのサービスからのイベントによって)に指示されない限り

  • は、必ずユーザーコントロールは決してそれを再ロードする最初のロードと上のすべてのデータをキャッシュしてください
  • すべてのコントロールが、データを再利用できる一連の共通サービスを使用していることを確認します。例えば。 2つのコントロールが顧客リストへのアクセスを必要とし、同じ要求セッションのコンテキストで実行している場合は、1つの顧客リストの参照のみが必要です。
+0

私は同意します完全にあなたのアイデア(と私も同様に保持するアイデア)...これは、セッションがユーザーIDを保持する以外に使用されないasp.netに精通している人によってアプリケーションが開発されていないという私の気持ちを再現します変数と各ユーザーコントロール – davidsleeps

2

私はあなたが非常に多くのユーザーコントロールを使用するアプリケーションに精通していないことをそれを取りますか?

あなたはこのアプリケーションの不慣れな側面はなじみのない悪いパフォーマンスの原因であるという結論にジャンプすることができるようですね。これらは、すべてのASPのメモリやCPUプロファイリングを行うことができます

を:代わりに仮定を作るのは、なぜ以下のプロファイリングツールのいずれかを試してみて、そして見つけます.NETアプリケーション。

+0

私はこの量のユーザーコントロールにあまり慣れていません...私が取り組んできたすべてのasp.netプロジェクトでそれらを使用していますが、私は各ページがビジネスオブジェクトの近くにマップされているページのすべての部分ではなくユーザーコントロールからなるユーザーコントロールを使用します。 – davidsleeps

1

私は、ユーザーコントロールの重要な目的の一つは、コードの再利用であると信じています。つまり、複数のWebページで同じ機能が実行される場合は、複数のWebページに対してUserControlを作成する方がよいでしょう。これにより、開発者は同じコードを複数のWebページに書き込む(またはコピーして貼り付ける)ことができるだけでなく、メンテナンスもずっと簡単になります。 UserControlに加えられた変更は、UserControlが使用されるあらゆる場所で自動的に実装されます。メンテナンスの開発者は、コードの変更が必要な場所をすべて見つけることを心配する必要はありません。

1回限りのUserControlが有効であるかどうかはわかりません。彼らはコードをカプセル化して分割します。これはビジーなWebページ上でうまくいきます。

UserControlsが再利用されているかどうか、またはそれらの多くが一度だけ使用されているかどうかを確認できますか。

+2

カプセル化は実際にはユーザーコントロールの重要な目的であり、再利用は良好なカプセル化の利点の1つです。 –

+0

それは混在しています。 Webアプリケーションのすべてのビジュアル要素はユーザーコントロールに存在するため、一部のページ(メニュー、ヘッダーなど)に表示されるものもあれば、コントロールに関連する単一のページにのみ表示されるものもあります。 – davidsleeps

1

私は、あるものが持つ影響を特定するために、いくつかのプロファイリングを行うことについてSaundersに同意します。あなたがここにIISのためのいくつかの無料のストレステストツールを取得することができます

注:http://support.microsoft.com/kb/840671

私はあまりにも多くのコントロールを持つことは、おそらく良いことで、私見ではないこと、しかし、と言うだろう。もっと知ることなく、私は仮に20歳があまりにも多いと言っています。

+2

"20が多すぎます"毎回同じDALメソッドにアクセスしますか?あなたはこれに引用することができるソースがありますか? –

+1

私のソースは、私の意見です。カスタムユーザーコントロールは20種類あります。基本的には、ページが20個のデータを表示していること、または20ビットを超えるデータが表示されていることを意味します。 –

+0

私は同意します。特にタブコントロールが表示されていないのにユーザーコントロールが作成されている場合は、不必要なオーバーヘッドが発生しますが、これ以上知りません。ページ上の40個以上の最適化されたユーザーコントロールを非常に特定の目的やビジネスルールのカプセル化。 –

4

私は、ページ上で使用する必要があるいくつかのユーザーコントロールに厳しい制限がないことを示唆している人々のキャンプに自分自身をしっかりと置いていきます。これは、アプリケーションレベルのトレースがページレベルのトレースではなく、ここで順番に行われるように思えます。これらのコントロールの一握りが問題を引き起こしているのは非常にうかがいます。ヘック、それはすべての大騒ぎを引き起こして単一のコントロールになる可能性があります。しかし、「平均的な」(そうしたことがあれば)ユーザーコントロールが使用されるようなリソース使用量については、何も仮定することは不可能であるため、同様に制限を示唆することは不可能です。それ以外の場合は、クラスのメンバー数やデータベースへのストアドプロシージャ数に同様の制限があります。

ここで、各リフレッシュでそれぞれ独自のデータを取得し、必要に応じてViewStateを使用して複数のサブコントロールを持つ複雑なユーザーコントロールを20個話していると、それは問題です。それでも、それはあまりにも多くのコントロールがあるよりも全体的なデザインと関連があります。一方、テキストボックスの左にあるラベルのコンポジット(または、おそらくラベル+ユーザーが実行可能なコントロールのすべてのコンビネーション)を処理する共通のユーザーコントロールを作成し、これを振りかざした場合アプリ全体のコントロール、私はあなたがページのこれらの束を得るだろうと私は想像することができます、なぜそれは必然的に何かを傷つけるだろうか分からない。

関連する問題