문제

C# 프로세스의 벤치마킹을하고 싶지만 시간을 벡터로 사용하고 싶지는 않습니다. 특정 메소드 호출에서 실행되는 IL 지침 수를 계산하고 싶습니다. 이게 가능해?

편집하다 나는 방법 본문의 정적 분석을 의미하지 않습니다 - 실행되는 실제 지침 수를 언급하고 있습니다. 예를 들어, 방법 본문에 루프가 포함되면 카운트가 증가하지만 많은 지침이 구성됩니다. 루프 * 루프의 횟수는 반복됩니다.

도움이 되었습니까?

해결책

나는 당신이 원하는 것을 할 수 있다고 생각하지 않습니다. IL은 JIT (정시) 편집 중에 만 사용되기 때문입니다. 이 방법이 실행될 때까지 IL은 기본 기계 코드로 변환되었습니다. 따라서 주어진 방법/유형/어셈블리에서 IL 명령의 수를 정적으로 계산할 수는 있지만 런타임 시점에 대한 개념은 없습니다.

해석 될 IL 지침의 수를 아는 의도를 언급하지 않았습니다. 메소드 본문의 IL 수와 실제 기계 코드 지침 수 사이에는 느슨한 상관 관계가 있다는 점을 감안할 때,이 숫자가 어떻게 달성 할 것인지 (호기심을 충족시키는 것 외에) 알지 못합니다.

다른 팁

글쎄, 그것은 쉽지 않을 것입니다. 나 생각한다 IL 블록 이후에 실행 된 성능 카운터 코드로 컴파일 포스트 컴파일을 계산할 수 있습니다. 예를 들어, int를 스택에로드 한 메소드 섹션이있는 경우 최적화 된 코드에서 해당 int를 사용하여 정적 메소드를 실행 한 경우 int로드 및 호출에 대해 2의 카운트를 기록 할 수 있습니다.

기존의 IL/관리 조립 조립/쓰기 프로젝트를 사용하더라도 이것은 꽤 어려운 작업이 될 것입니다.

물론, 카운터를 기록한 몇 가지 지침은 방금 x86/ia64/x64로 정시 컴파일 중에 최적화 될 수 있지만 IL과 같은 추상적 인 Lanaguage를 기반으로 프로필을 시도해야 할 위험이 있습니다.

당신은 사용할 수 있습니다 Icordebug 관리되는 인터페이스가 있습니다. 방법의 시작 부분에서 중단 점을 chuck하고 메소드가 떠날 때까지 코드를 프로그래밍 방식으로 진행하십시오.

그러나, 나는 메트릭이 얼마나 유용한 지 잘 모르겠습니다. 사람들은 이런 종류의 물건에 시간을 사용하는 경향이 있습니다. 일부 IL 지침은 다른 지시 사항보다 비쌉니다.

나는 그것을 사용한다 코드 메트릭 반사기에 추가하십시오

Codemetrics 애드 인은 어셈블리에서 여러 코드 품질 메트릭을 분석하고 계산합니다. 이 애드 인은 반사기를 사용하여 사이클 성 복잡성 또는 방법의 로컬 변수 수와 같은보다 간단한 메트릭과 같은 고전적인 메트릭을 계산합니다. 모든 결과는 파일에 저장 될 수 있습니다.

플러그인을 설치하십시오. 어셈블리 및로드 메소드 메트릭을 선택하십시오. 그것은 당신에게 codesize, cyclomatic complexity, ustruction 등의 그리드를 보여줄 것입니다.

나는 당신이 정적 카운트를 원하지 않는다는 것을 알고 있습니다. 그러나 아크 당 정적 IL 수와 아크가 함께 실행 된 횟수는 IL 수를 제공합니다. 카운터를 삽입 해야하는 각 호를 계기해야합니다.

(아크는 출입 또는 외출 할 수없는 일련의 지침입니다. 첫 번째 명령을 실행하면 항상 마지막을 실행합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top