linq2sql(リポジトリパターン)とのsqlcachedependency
-
25-10-2019 - |
質問
ASP.NET 3.5 WebアプリでL2Sリポジトリパターンを使用しています。しかし、私はライブで経験豊富なパフォーマンスに満足していません。 Googleを検索し、SQLCacheDependencyクラスを使用してSQLキャッシュに出会いました。しかし、私のシナリオでそれを使用する方法を説明するチュートリアルやリンクはありません。
だから私を助けてください...どんな助けやガイダンスは高く評価されます。
いくつかのサンプルコードまたはオンライン参照を使用してください。
前もって感謝します
更新:私のリポジトリ
public interface IRepository<T> where T : class
{
T GetById(int id);
IQueryable<T> GetAll();
void SaveOrUpdate(T entity);
void DeleteOnSubmit(T entity);
}
解決
Linq-to-SQLは、予期しない方法でクエリを作成する場合があります。 LINQクエリがSQLにどのように翻訳されているかを確認しましたか? SQL Server Profiler(SQL Management Serverのツールメニューで利用可能)を使用して、生成されたクエリを確認します。私はそれについていくつかの情報を書きました ここ.
良いクエリが生成されていることがわかったら、それらの誰かの実行がパフォーマンスボトルネックであるかどうかを調べる必要があります。プロファイラーもここで役立ちます。一部のクエリが遅い場合は、適切なインデックスを追加してみてください。
非常に大量のサイトがない限り、これらの手順はキャッシュを行わずにパフォーマンスを提供する必要があります。
他のヒント
リポジトリでLINQをSQLに使用している方法を説明しませんでした。基本的に、単一のリクエスト中に作成されたすべてのリポジトリに対して同じDataContextを再利用していますか、それとも各リポジトリは独自のDataContextインスタンスを取得しますか?後者の場合、DataContextの内部的な割り当てを失います。
パフォーマンスを改善できるもう1つの領域は、多くの結合レイヤーを含む頻繁に使用されるクエリがある場合です(単一のテーブル選択だけでなく)。を使って CompileDquery ここでは、物事を大幅にスピードアップします。コンパイルされた征服は、最初に使用されるときにのみ生成する必要があります。そうしないと、使用するたびにクエリが再コンパイルされます。