제품 서버에서 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의 문제를 조사합니다. 가장 느린 것 (15s까지)은 ASP.NET Begin Request입니다.
생산성 서버 :
- 윈도우 2008
- 3기가바이트 램
- 이 다른 .NET 응용 프로그램
- SQL08
편집
그것은 보인다 문제는 해결되었습니다. 예! @vtortola가 세션에 대한 힌트를 주셔서 감사합니다. 나는 약간의 조사를했고 좋은 링크를 발견했다. 그런 다음 [SessionState (SessionStateBehavior.ReadOnly)]가있는 새 컨트롤러를 만들었습니다. 그리고 그게 내 문제를 해결 한 속성입니다 :)! 여기
는 http://www.davidcoombes.co/?p=151
base.GetAllQueryable()은 무엇을합니까? 어쩌면 모든 요청에 대해 모든 테이블을 메모리에로드하는 것일 수 있습니다. –
@ UfukHacıoğulları jQuery를 통해 순간 3 목록에 더 많은 정보를 추가했습니다. –