SQL Server에서 Entity Framework를 사용하는 WPF 프로젝트에서 작업합니다. 거기에 최적화가있다. 모든 것이 너무 느립니다. 코드의 어느 부분에서 성능이 저하되는지 진단하고 싶습니다. 제대로 설계되지 않았고 성능이 떨어지는 경우가 거의 없습니다.많은 메서드의 실행 시간 측정
이제 모든 테이블에 대해 클래스가 있습니다 (예 : UserRepository
). 정확히 저장소 패턴이 아닙니다. 이러한 클래스에는 다음과 같은 메서드가 있습니다. GetAll(...), GetById(...), GetNewest(...), GetAllWithHigherSalaryThan(int salary, int companyId)
등등, db에 대한 많은 메서드 접근 자입니다. 데이터베이스는 저장소 클래스에서만 사용됩니다.
리팩토링에 대해 이야기하고 싶지 않습니다. 난 단지 모든 메소드가 실행되는 시간과 실행 중에 얼마나 많은 시간이 실행되었는지를 측정하고자합니다. 그 정보로 나는 벌레를 발견 할 수있을 것이다.
많은 클래스에서 "db에서 선택"하는 메소드를 약 100 ~ 측정하고 싶습니다. SQL Server Profiler는 이러한 메서드가 무수히 실행되고 가능한 경우 Profiler에서 로그를 분석하는 것이 데이터베이스에 대한 접근 방식이 아니므로 속임수가 아닙니다.
샘플 방법 :
public IEnumerable<Foo> GetFoo(int y, int z)
{
return Context.Where(p =>
p.X == null &&
p.Y == y &&
p.Time >= z).OrderBy(x => x.Time).AsEnumerable();
}
지금은 모든 방법에 스톱워치를 추가 실행 시간을 측정, 실행을 계산하고 일부 싱글 또는 무언가에 전달 대해 생각했다
, 다음을 표시합니다. 물론이 진단을 끝내면이 진단 도구를 끄 겠지만이 방법은 모든 방법을 편집해야하는 매우 주일간의 과정이며 이후에 사용하지 않으려면 어떻게해야할지 모르겠다. 어쨌든#define DEBUG
과 같은 것 같지만 절름발이입니다.
리플렉션을 사용하여 효과를 얻으려는 시도가있었습니다. 아마도 C#의 메서드 실행 시간을 볼 수있는 방법이 있습니까?
무엇이 좋습니다?
VS 프로파일 러를 사용해 보았습니까? VS2012 이상에서는 꽤 좋습니다. – BradleyDotNET
당신은 [Entity Framework Profiler?] (http://www.efprof.com)를 보았습니까? 꽤 멋진 소프트웨어 조각입니다. –