2011-09-28 2 views
2

SlimTune을 사용하여 C# 어플리케이션을 프로파일 링하는 동안 원시 함수 프로파일 링이 활성화되면 "CoUninitializeE"라는 함수에 대한 항목이 많이 있습니다. CoUninitialize는 COM 개체와 관련이있는 것으로 보이지만 직접 Com 개체를 사용하는 것은 아니며 Google은 E로 끝나는 버전에 대한 정보가 없습니다.알 수없는 함수 CoUninitializeE가 프로파일 링 중에 표시됩니다.

이 함수의 기능에 대해 알고있는 사람이 있습니까? 그것에 소비 된 시간은 얼마입니까? (감소 메모리 할당 또는 할당 해제 도움이 될 수 있도록 예를 들어, 그것은 메모리 관리와 관련된?)

편집

함수의 이름은 실제로 "CoUninitializeEx"이고 SlimTune 그냥 잘라낸 것 같습니다

웬일인지 편지. 나는 여전히이 함수가 호출되는 것에 대한 지식을 높이 평가할 것이다.

+0

AFAIK CoUnitializeEx가 없습니다. 스크린 샷을 게시 할 수 있습니까? CoInitialize/Ex & CoUninitialize는 스레드를 COM 라이브러리에 등록하기 위해 존재합니다. 메인 엔트리 포인트에서 스레드 속성 (STAThread/MTAThread)을 제공하지 않더라도 메인 스레드는 항상 라이브러리에 등록되어 있다고 가정합니다. –

+0

CoUninitializeEx는 또한 GetAddrOfContractShutoffFla ...를 호출하는 TranslateSecurityAttribute를 호출하는 CorLaunchApplication을 호출하는 것처럼 보입니다.이 호출은 WaitForSingleObjectEx를 호출하는 WaitForSingleObject를 호출하는 SetCounterName을 호출합니다. 이 함수들 중 많은 부분이 COM 중심으로 보이지만, 내가 아는 COM 객체를 (직접적으로) 사용하지는 않는다. 내가 사용하고있는 유일한 표준 라이브러리는 System.Math입니다. –

답변

3

CoInitalizeEx() 및 CoUninitialize()는 Windows 프로그래밍의 핵심입니다. 그들은 각각 스레드에서 COM을 초기화하고 종료합니다. CLR은 스레드가 실행되기 전과 후에 자동으로 이러한 함수를 호출합니다. .NET 프로그램에서 COM을 사용하는 것을 피하는 것은 꽤 어렵습니다. 네이티브 Windows 코드의 기본 확장 성 모델입니다. 배관망을 숨기는 .NET 프레임 워크의 많은 래퍼 클래스 덕분에 눈에 띄지 않습니다.

일반 진단은 많은 스레드를 사용한다는 진단입니다. 네, 비싸요. 스레드 풀은 해결 방법입니다.

+0

감사합니다 Hans; 문제는 내가 어떤 스레드를 사용하고 있지 않다는 것입니다. 문제의 함수에 의해 수행되는 유일한 작업은 산술, 루핑/비교, 메모리 할당 (새로운 double []을 통한 double) 및 Math.Log 호출입니다. Math.Log에 대한 호출이 어떻게 든 새로운 스레드를 생성합니까? –

+0

아니요. 당신이 무엇을 찾고 있는지, 네이티브 코드의 프로파일 링을 가능하게한다면,이 기능을 보게 될 것이 틀림 없다. 실제로이 코드를 변경할 수 없으므로 아마도이 코드를 보지 않는 것이 좋습니다. –

+0

특히이 유형과 관련된 프로그래밍 유형을 찾고 있습니다. CoUninitializeE는 내 프로그램 시간의 40 %를 차지합니다. 일부 기능에서는 나타나지만 다른 기능에서는 나타나지 않으므로 함수 호출시 일정한 오버 헤드가 아닙니다. 메모리 할당과 Math.Log가 내가 사용하고있는 것 같은 "네이티브"호출이기 때문에 이것이 이들 중 하나와 관련이 있는지 궁금해하고있었습니다. I.E., Math와 관련이 있다면. 로그인하면 Math.Log를 호출하기 위해 함수를 최적화하고 최적화 할 수 있습니다. –