VS 2012 자체 성능 분석 도구 사용 사례(그림 설명)
콘 솔 코드 먼저 보기소스 코드 다운로드:
static void Main(string[] args)
{
int i = 10000;
while(i-->0)
{
Core c=new Core();
c.Process(DateTime.Now.ToString());
}
}
public class Core
{
public void Process(string input)
{
//process logic
string result = string.Format("{0}-{1}", DateTime.Now, input);
//log to file
Log(result);
}
public void Log(string message)
{
string fileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt");
string msg = "{Now}: {Message}";
msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
msg = msg.Replace("{Message}", message);
using (StreamWriter sw = System.IO.File.AppendText(fileName))
{
sw.WriteLine(msg);
sw.Flush();
sw.Close();
}
}
}
"완료"단 추 를 누 르 면 자동 으로 분석 을 하고 콘 솔 프로그램 을 완 주 합 니 다.vs 2012 는 분석 보고 서 를 자동 으로 표시 합 니 다.다음 과 같 습 니 다.
위의"요약"보고서 에서 알 수 있다.
System.IO.File.AppendText 함수 와 System.AppDomain.getBaseDirectory 함수 가 가장 많은 시간 을 소모 합 니 다.우 리 는 먼저 이 두 함수 의 사용 을 최적화 시 켜 야 합 니 다.(잠시 후에 다시 이야기 합 니 다)모두 가장 오래 걸 리 는 5 개의 함 수 를 보 여 줍 니 다.
보고서 보기 종류:
생 성 된 보고 보 기 는 여러 가지 가 있 습 니 다.위 에서 보 여 준 기본 값 은'요약'보기 입 니 다.다른 유형의 보 기 는 다음 과 같 습 니 다.
그러면 우 리 는 어떻게 이 몇 개의 시간 이 걸 리 는 함 수 를 추적 합 니까?"함수 상세 정보"보기 로 넘 어가 야 합 니 다.다음 과 같 습 니 다.
오른쪽 빨간색 상 자 는 시간 분포 비율 을 나타 내 는데 위의 그림 에서 Process 함수 가 큰 비례 를 차지 한 것 이 분명 하 다.
아래 의 빨간색 상 자 는 해당 하 는 코드 를 대표 하고 빨간색 의 하 이 라이트 성능 손실 이 두 드 러 진 코드 줄 과 해당 하 는 손실 비율(그림 의 99.2%는 이 코드 가 모두 3 개의 손실 점 이 있 기 때 문 입 니 다.83.3%+14.4%+1.5%)
우 리 는 아래 를 추적 하고 가장 심각 한 process 함수 에 들 어가 서 볼 필요 가 있 습 니 다.우 리 는 오른쪽 빨 간 상자 에 있 는 Process 바 를 클릭 하고 세분 화 된 분석 인터페이스 에 들 어가 야 합 니 다.다음 과 같 습 니 다.
보아하니 주요 문 제 는'Log(result)'코드 줄 에서 73.5%를 차지 하고 계속 깊이 추적 하 는 것 이다.다음 과 같다.
다음은 차이 가 많 지 않 습 니 다.여기 서 손실 이 많은 두 줄 은 fileName 과 AppendText 를 로그 파일 코드 줄 로 가 져 와 각각 최적화 합 니 다.
파일 이름 을 가 져 오 는 최적화 로그 파일 이름 은 변 하지 않 습 니 다.따라서 로그(msg)를 계산 하지 않 아 도 됩 니 다.static 인 fileName 변수 AppendText 최적화 가 I/O 작업 에 관련 되면 속도 가 느 려 서 피 할 수 없습니다.(단일 코드 의 측면 에서 볼 때)어떻게 합 니까?그럼 구 조 를 바 꾸 세 요:주 프로그램 은 log 를 대기 열 에 기록 하고 다른 thread 가 디스크 에 기록 합 니 다.
수정 코드 는 다음 과 같 습 니 다:
public class Core
{
public void Process(string input)
{
//process logic
string result = string.Format("{0}-{1}", DateTime.Now, input);
//log to file
Log(result);
}
private static List<string> log = new List<string>();
public static void Log(string message)//fileName , ,
{
string msg = "{Now}: {Message}";
msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
msg = msg.Replace("{Message}", message);
log.Add(msg);
}
}
우 리 는 성능 분석 을 다시 실행 합 니 다.다음 과 같 습 니 다.우 리 는 다음 과 이번 의 곡선 도 를 비교 했다.
개 선 된 성능 은 이전의 성능 을 개선 하 는 것 보다 현저히 좋다.
사용자 정의 성능 분석
저 희 는 속성 을 수정 하여 add/remove 성능 지 표를 추가 할 수 있 습 니 다.예 를 들 어 특정한/일부 Windows 카운터 에 가입 하고 Windows 사건 을 수집 하 며.NET 대상 의 생명 주 기 를 수집 하 는 등 다음 과 같은 조작 을 통 해 설정 할 수 있 습 니 다.
다음 과 같은 더 자세 한 보고 서 를 생 성 합 니 다.
보고서 에 가장 많이 생 성 된 대상(이 예 는 string),어떤 함수 로 인해 가장 많은 메모 리 를 분 배 했 는 지 등 을 보 여 줍 니 다.
"태그"보기에 서 500 밀리초 마다 수집 하 는 windows 카운터 데 이 터 를 볼 수 있 습 니 다.아래 그림 은 디스크 큐 카운터 의 수집 입 니 다.
'대상 생존 기'보기에 서 각종 대상 이 new 에서 dispose 까지 의 모든 데 이 터 를 볼 수 있 습 니 다.다음 그림:
대단 하 죠?
다음은 VS 2012 를 통 해 독립 적 으로 실행 되 는 프로그램 에 대해 성능 분석 을 하 는 방법 에 대해 말씀 드 리 겠 습 니 다.사실은 간단 합 니 다.아래 의 그림 만 있 으 면 됩 니 다.모두 가 알 고 있 습 니 다.
웹 프로젝트 의 성능 분석 을 어떻게 하 는 지...
웹 프로젝트 솔 루 션 을 먼저 열 고 성능 분석 을 직접 합 니 다.누 군 가 는 조작 을 요청 하지 않 았 다 고 합 니 다.이 간단 하고 여러 가지 해결 방법 이 있 습 니 다.VS 환경(원 격 이 든 로 컬 이 든)을 하나 더 열 고 웹 부하 테스트 를 통 해 loadrunner/qtp 를 통 해 슬 픈 요청 을 모 의 하 는 인공 요청 을 미 친 듯 이 요청 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VS 2012 Express There was a problem sending the command to the program 문제 해결문제 현상 Visual Studio 2012 Express 를 설치 한 후 웹.config 파일 을 두 번 눌 렀 을 때"There was a problem sending the command to the progr...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.