【发布时间】:2012-10-16 11:51:30
【问题描述】:
我的 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();
}
【问题讨论】:
-
您是否正在使用“使用”构造来处理您的 DbContext/ObjectContext 对象?如果不是,您可能正在泄漏连接。另外,你确定这个问题是由悬空连接引起的吗?你是怎么知道的?
-
我正在使用 Ninject 将 DbContext 注入到具有 InRequestScope() 范围的存储库中。我认为应该处置 DbContext。我不确定我的性能问题是否与连接有关。只是想一点一点地找到它的位置。
-
你看到了什么?您的性能问题的症状是什么?您是否尝试过分析您的应用?
标签: asp.net-mvc-3 performance debugging entity-framework-4.1