1

パフォーマンスのボトルネックに悩まされている ASP.NET MVC アプリがあります。EF 接続をプロファイリングし、許可されている最大 EF 接続と現在開かれている接続を調べたいと思います。それを行う方法はありますか?

私のリポジトリコード

    using EntityFramework.Patterns;


     public class ServiceRepository : IServiceRepository
        {
            private readonly IRepository<User> _userRepository;
            private readonly IUnitOfWork _unitOfWork;


            public ServiceRepository(DbContext dbContext)
            {
                var dbContextAdapter = new DbContextAdapter(dbContext);
                _unitOfWork  = new UnitOfWork(dbContextAdapter);            
                _userRepository = new Repository<User>(dbContextAdapter);
            }

            public IQueryable<User> GetUsersByProduct(int productId)
            {
                return _userRepository.AsQueryable().Where(p => p.Orders.Any(o => o.ProductId == productId));
            }
//Skip code

        public void Commit()
        {
            _unitOfWork.Commit();
        }

    }

Ninjectによる注射

private static void RegisterServices(IKernel kernel)
{
       var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
       kernel.Bind(typeof(DbContext)).ToMethod(context => new DbContext(connectionString)).InRequestScope();           
       kernel.Bind<IServiceRepository>().To<ServiceRepository>().InRequestScope();
}
4

1 に答える 1

0

EF 接続は、問題である可能性がある基になる接続の種類を使用します。EF コンテキストがそれらを開いたままにしています。

あなたはSQLサーバーに反対していますか?もしそうなら、問題はあなたのSQL接続である可能性があります。ANTS プロファイラーを使用して、パフォーマンスの問題がどこにあるかを見つけ、そこから最適化します。

MiniProfiler または glimpse を使用して、エンティティ フレームワーク クエリと一部の実行統計を表示できます。また、リクエストごとにコンテキストを破棄して、リクエストごとに新しいコンテキストを作成していることを確認します。

于 2012-10-16T18:31:40.010 に答える