プロジェクトの最適化方法に関するアドバイスを探しています。私たちには、SQL2008データからデータを取得し、DevExpress ASPxGridViewに表示するASP.NET/C#システムがあります。取得されるデータは、いくつかのデータベースのうちの1つから取得することができます。これらのデータベースはすべてわずかに異なり、定期的に追加および削除されます。ユーザには、実際の「会社」のリストが提示され、データは対応するデータベースから取り出される。ASP.NETページで大規模に動的に指定されたテーブルを取得するための最適な戦略
現在、標準のSqlDataSourceと動的に作成されたSQL SELECTステートメントを使用してデータが取得されています。ステートメントにはいくつかのJOINがあり、オプションのWHERE制約もデータベースとユーザーの権限レベルによって動的に作成されます。
このすべては、パフォーマンスとは別に素晴らしい(正直な!)ものです。一部のデータベースでは、数十万行があり、データの取得とページングは非常に遅いです(データベースはすでに適切に索引付けされています)。私はシステムを高速化する方法を見てきましたが、XPOかLINQという2つの選択肢があります。
LINQが普及しているようですが、本来動的なシステムで実装するのは簡単ではありません。LINQがアクセスできるデータベースごとに "定義"を作成する必要があります?私はLINQクエリを動的に作成することについても少し不明ですが、少なくとも一部は実行可能と思われるいくつかの例を見ています。一方、XPOは、その場でXPOデータソースを作成することができます。しかし、私は他のテーブルにどのようにジョインするかについてあまりにも多くの情報を見つけることができません。
どのような方法があれば、このプロジェクトに取り組むのがベストですか?または、現在使用されている動的SQLモデルは、LINQとXPOとは根本的に異なり、最も良いものは残っていますか?
こんにちは、非常に便利な返信をいただきありがとうございます。私は既に上記のほとんどをチェックしました。問題は、私が理解しているように、WebサーバーがSQLサーバーからテーブル全体を取り出し、データをページングして結果をブラウザに送信することです。したがって、ユーザーがクリックしたすべてのページは、テーブル全体が読み取られます。 XPOとLINQは、データベースから実際に表示された行だけを読み取るようにクエリをカスタマイズすることでこれを回避しているようです。この動作をシミュレートするために動的SQLクエリを再コードする必要があるようです。 – KenD
こんにちはKennyさん、その場合、次の50が必要なときに、トップ50とプルダウンするようにクエリを変更することはできませんか?これを行うために、私は以下の 'USE AdventureWorks 'のようなものを使って個人的にsprocを作成します。 OrderedOrders RowNumber関数10と20との間からSELECT * ( 'RowNumber関数' Sales.SalesOrderHeader FROM AS)受注日BY ORDER(OVER SELECT SalesOrderID、受注日、 ROW_NUMBER()) AS OrderedOrders WITH GO; ' 10と20を必要なデータの範囲に変更します。私はDevExpressコントロールを一度も使用していないことを認めています。 –