2010-11-18 3 views
1

このページには多くのメソッドがあります。あるメソッドはユーザの電子メールをフェッチしています.1oneはリピータをバインドしており、もう1つはパスワードとすべてを変更しています。各メソッドでは、ストアドプロシージャが呼び出され、DBに変更が加えられました。SQLサーバコールの最小化について

だから私のページのPage_Loadイベントは次のようになります - 今、このようにSQLサーバーを経由して、その上のように呼ばれている

protected void Page_Load(object sender, EventArgs e) 
    { 

       BindCon(); 
       getemail(); 
       getadd(); 
       BindRepeater(); 

       getpic(); 


} 

がパフォーマンスに影響します。私は、上記のメソッドで一度使用されているすべてのストアドプロシージャを実行し、上記のようにSQL Serverを繰り返し呼び出さないようにストアドプロシージャを作成することができると考えました。今私はどのようにそのPを作成し、私のコードで使用するのですか?アイデアが必要です... thnx

+3

答えは現在のdbコールをどのように行うかによって異なります。 'SqlCommand'? Linq-to-Entities?そのコードの一部を共有してください。 – BeemerGuy

+0

更新しました。help.thnx – Serenity

+1

を更新しました。パフォーマンスに影響を受けている場合は、sproc名に "sp_"という接頭辞を使用して再検討してください。 http://blog.sqlauthority.com/2010/02/16/sql-server-stored-procedure-optimization-tips-best-practices/ – Matt

答えて

2

これらのすべてをテーブルの1つの行(口座、電子メール、年齢など)から個別に取得する場合は、各列の呼び出しではなく、一度にすべてを一度に取得する必要があります。

さらに、1つの行(口座、受信トレイ内のメッセージ数、口座残高)を作るために結合と組み合わせることができる別々のテーブルからものを取得している場合は、SPでそれを行い、行。

物事が本当に別のエンティティ(ユーザアカウントの行と権限の複数の行)である場合は、ストアドプロシージャから複数の結果セットを返し、ADO.NET機能を使用して次の結果セットを取得することもできます。

長時間実行されているSPの場合は、1つのSPが効果的に操作を連続して実行するため、非同期ADO.NETを使用してすべてのSPを並列に呼び出す方がよい場合があります。

データベースがサブシステム間で切断されている場合でも、エンティティ境界をまたいだいずれかのサブシステムへの変更の影響を受けるSPを作成している可能性があるため、メンテナンスの問題を引き起こす可能性があります。できるだけデカップリングを試みるために、可能な場合は、各エンティティドメイン内のSPを別々のSPにコールします。将来の変更のために変更する必要がある場合でも、少なくとも依存関係をクリアする必要があります。

0

SQLプロファイラを実行して、何が繰り返されているかを分析し、通常必要としないものを減らすことができます。 ASP.Netを使用しているため、セッション、アプリケーション、キャッシュなどの状態を利用して、必要に応じてデータを格納できます。

関連する問題