我的產品服務器上的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添加了一些更詳細的信息 –