我的产品服务器上的MVC3应用程序有问题(我在VS12中没有任何问题)。MVC3与jQuery缓慢的请求时间
- 的jQuery 1.8.2
- AutoFaq
- 库模式
- log4net的
- AutoMapper
的应用已在_Layout.cshtml其中有一些名单,每5更新秒通过jQuery。
代码看起来或多或少是这样的:
<script type="text/javascript">
var products = $("#products ul");
function updateProducts() {
setTimeout(function() {
$.post("/Product/List", { rows: 10 }, function(html) {
products.before(html).remove();
products = $("#products ul");
// To avoid multiple posts update the list until the post is done
updateProducts();
});
}, 5000);
</script>
和控制器看起来是这样的:
public PartialViewResult List(int rows)
{
var products = productService.GetNewest(rows);
return PartialView(products);
}
的服务看起来是这样的:
public class ProductService : Service<Product>, IProductService
{
private IRepository<Product> repository;
public ProductService(IUnitOfWorkFactory unitOfWorkFactory)
{
IUnitOfWork unitOfWork = unitOfWorkFactory.Create();
this.repository = unitOfWork.ProductRepository();
base.Repository = this.repository;
base.UnitOfWork = unitOfWork;
}
}
public List<Product> GetNewest(int rows)
{
var products = repository.GetAllQueryable(); //=> returns a IQueryable
products.OrderBy(o => o.CreateDate).Take(rows);
return products.ToList();
}
库(EF 5.0代码优先):
public class Repository<T> : IRepository<T> where T : Base
{
private RepositoryContext _dataContext;
private IDbSet<T> _dbset;
public virtual IQueryable<T> GetAllQueryable()
{
var all = _dbset;
return all;
}
}
的UnitOfWork:
public class UnitOfWork : Disposable, IUnitOfWork
{
private RepositoryContext _dataContext;
private Repository<Product> _productRepository;
public IUnitOfWork GetCurrent()
{
_dataContext = _dataContext ?? (_dataContext = new RepositoryContext());
return this;
}
public IRepository<Product> ProductRepository()
{
_productRepository = _productRepository ?? new Repository<Product>(_dataContext);
return _productRepository;
}
}
和局部视图只包含一个foreach返回的产品名称。
即使我只有一个必须更新的列表,页面加载速度会变慢并且它是随机的。我也使用log4net来检查jQuery试图获取产品时是否发生了什么,但日志是空的:)。
我也调查与MiniProfiler的问题。最慢的事情(长达15秒)是ASP.NET Begin Request。
PROD服务器:
- 的Windows 2008
- 3GB内存
- 2其他.NET应用程序
- SQL08
编辑
看来问题是固定的,YAY!感谢@vtortola提供Session的提示。我做了一些研究并找到了很好的联系。然后我创建了一个新的控制器,它上面有[SessionState(SessionStateBehavior.ReadOnly)]。就是这样,一个属性解决了我的问题:)!
这里是一个有益的联系,尤其是当你想要一个像SessionStateBehavior ReadAndWrite http://www.davidcoombes.co/?p=151
base.GetAllQueryable()是做什么的?也许它会在每个请求中将所有表加载到内存中。 –
@UfukHacıoğulları我已经通过jQuery添加了一些更详细的信息 –