2012-12-09 3 views
3

제품 서버에서 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

+0

base.GetAllQueryable()은 무엇을합니까? 어쩌면 모든 요청에 ​​대해 모든 테이블을 메모리에로드하는 것일 수 있습니다. –

+0

@ UfukHacıoğulları jQuery를 통해 순간 3 목록에 더 많은 정보를 추가했습니다. –

답변

0

당신은 시간에 얼마나 많은 목록을 업데이트 할 ReadAndWrite 같은 SessionStateBehavior을 원하는 특히 때, helpfull 링크입니까? 세션 객체는 동일 세션에 대해 한 번에 하나의 요청 만 처리 할 수 ​​있다는 것을 의미하는 동시성 (pesimisic) 동시성 접근 방식을 사용합니다.병렬로 여러 요청을 수행하는 경우 해당 컨트롤러에서 세션을 비활성화하거나 세션을 읽기 전용으로 설정하십시오. SessionStateAttribute를 살펴보십시오.

건배.

+0

. 그러나 1 목록 만 업데이트하는 경우에도 발생합니다. 하지만 세션이 필요한 경우 어떻게해야합니까? 예를 들어 로그인 한 사용자가 만든 제품이없는 제품 목록? –

+0

당신의 힌트에 @vtortola에게 감사드립니다. 내 문제를 해결하는 방법에 관심이 있으시면 위에 편집 된 게시물을 참조하십시오. –

+0

니스! 세션을 비활성화하면 TempData를 사용할 수 없으므로 예외가 발생합니다. 건배. – vtortola