문제

나는 가장 최근의 (비 베타) Visual Studio 2008 SP1에서 도대체 무슨 일이 일어나고 있는지 알아 내려고 뇌를 rack습니다.

OpenMP로 구축 된 내 앱은 디버거에서 엄청나게 느리게 실행되어 CPU 사용량을 100%로 가져옵니다. 디버거 밖에서 실행되면 단지 릴리스 빌드의 경우 천천히 실행됩니다.

인텔 스레드 빌딩 블록 라이브러리 또는 자체 스레드 팀 구현으로 구축 된 내 앱은 디버거 밖에서 (릴리스 빌드)를 실행할 때보 다 디버거에서 느리게 실행됩니다.

SP1을 설치하지 않은 다른 개발 기계로 이동하면 상황이 다릅니다. 디버거 또는 외부에서 실행하면 프로그램 성능에 영향을 미치지 않습니다. OpenMP는 스레드 빌딩 블록 또는 내 스레드 팀 코드 (이 문제를 파악하기 위해 급히 쓰여진)와 마찬가지로 내 응용 프로그램을 가속화합니다.

이것은 앱에 대한 변경 사항이 전혀 없으며 Debugger, SP1과 정기적 인 Visual Studio의 내부 또는 외부를 실행합니다.

나는 Google에서 이것에 대해 아무것도 찾지 못했기 때문에 목을 내밀고 다른 사람이 이것이 그들에게 일어나고 있음을 인식 할 수 있기를 희망하는 무언가를 말하고 있습니다. 그 중 하나 또는 나는 물건을보고 있습니다.

도움이 되었습니까?

해결책

예. 경우에 따라. SP1로 전환 한 후 비슷한 속도가 저하되는 상황이 발생했습니다. 이것의 원인은 예외였습니다. 우리는 사전에서 키에 액세스하고 실패하고 예외를 포착하려는 패턴을 많이 사용하는 데이터 모드를 가지고있었습니다.

try {
  var a = dict[key];
} catch(KeyNotFoundException) {
  dict[key] = default;
  a = default;
}

이것은 단지 예일 뿐이지 만 원인은 전혀 예외였습니다. 어떤 이유로 든 디버거에서만 VS는 매우 느립니다. 참고, 이것은 이전의 경우 였지만 새로운 패치에서는 훨씬 더 나빴습니다.

해결책은 단순히 항상 테스트를 사용하는 것입니다. 위의 사전 예제의 경우, .ryget 또는 사용자 정의 코드를 사용하여 호출을 호출하기 전에 예외를 생성하는지 확인하십시오. .

더 많은 정보: 예외와 성능

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