2010-12-01 2 views
1

redgate performance profiler을 사용하여 asp.net mvc 2 응용 프로그램을 테스트하고 있습니다. 내가 발견 한 것들 중 하나는 XMLSerializer가 this post을 참조하는 CPU 시간을 너무 많이 사용하고 있다는 것입니다. 나는 그것을 지금 XmlSerializerCache을 사용하는 곳으로 바 꾸었습니다.어떻게이 .net 웹 서버 성능 프로파일 링 문제를 해결할 수 있습니까?

이제 XmlSerializer 문제는 더 이상 존재하지 않으며 Jmeter와 함께 웹 사이트를 사용하여 동시에 80 명의 사용자를 시뮬레이션하여 응용 프로그램을 프로파일 링합니다. 그래서 지금 시간을 최고 방법은 내가 줄 것이다 당기하고 일부 데이터에 FirstOrDefault()을하고있는 예 -

var values=(from c in DataContext.Table1 
      join s in DataContext.Table2 on new { c.Id, c.date } 
      equals new { s.Id, s.date } into list 
          where c.Id== Id && c.date == date 
          from s in list.DefaultIfEmpty() 
          select new DayDTO() 
          { 
           Points = c.points, 
           Points1 = c.points1, 
           Points2 = c.points2, 
           Points3 = c.points3, 
           Points4 = c.points4 
          }).FirstOrDefault(); 

사람이 내가 이것을 개선하기 위해 무엇을 할 수 있는지 저를 제안 할 수 있습니까? 현재 시간은 상위 2 가지 방법에 대해 25 초 및 16 초입니다. 동일한 시간에 80 명의 사용자를 시뮬레이트 중이며 너무 커서 테이블이 너무 커서 색인 생성과 같은 몇 가지 문제가 데이터베이스 (SQL Server 2005)에 발생했기 때문입니까? 등 ... 그리고 그 모습을 살펴 보겠다. 그러나 현재 C# 측에서 코드와 관련된 문제를 확인하려고한다.

감사의 말을 전한다.

+1

서버에 보내는 SQL 문에 액세스 할 수 있습니까? 예 : SQL 관리 스튜디오?, 아마도 Linq에서 생성 된 SQL은 차선책입니다. – Sebastian

답변

2

이것은 "최고 시간"이 "배타적 시간"이 아니라 "포괄 시간"이라고 가정합니다.

포괄적 시간은 메서드에서 호출 한 코드를 포함한다는 것을 의미합니다.이 경우 FirstOrDefault은 데이터베이스 호출을 실행합니다. 데이터베이스 호출은 대기 시간과 관련하여 비용이 많이 들지만 CPU 스레드는 차단되고 데이터베이스 호출을 기다리는 동안 CPU를 사용하지 않습니다.

처음에는 이것이 문제인지, 처리량 (데이터베이스 서버가로드를 처리 할 수 ​​있다고 가정)에 영향을주지 않지만 호출 대기 시간에 영향을주지 않아야하는지 스스로에게 물어야합니다.

이것이 문제인 경우 실제 SQL 쿼리의 속도를 높여야합니다. SQL 프로파일 러를 시작하고 실제 질문을 잡은 다음 SQL 관리 스튜디오에서 실행해야합니다. 실행 계획을보고 쿼리가 예상보다 느린 지 확인하고 그 이유를 찾으십시오. 속도가 너무 느리면 색인 생성을 시작하여 확인할 수 있습니다.

1

FirstOrDefault는 아마도 당신의 경우에 열거 형을 강제하는 메서드이기 때문에 범인으로 불리고있을 것입니다. 그 전에 .ToList()를 던진 경우 .ToList() 로의 부담 이동을 알 수 있습니다.

관련 문제