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 server 吗?如果是这样,那么问题可能是您的 sql 连接。使用 ANTS 分析器找出性能问题所在并从那里进行优化。

您可以使用 MiniProfiler 或 glimpse 查看您的实体框架查询和一些执行统计信息。我还将确保您在每次请求后处理您的上下文,从而为每个请求创建一个新的上下文。

于 2012-10-16T18:31:40.010 回答