문제

는 데 문제가 있으로 느리고 메모리 누수에서 나는 혼합 모드 C++/CLR.인터넷 응용 프로그램.

(이것은 C++기본 정적 라이브러리로 VS2008C++/CLR Windows 양식 응용 프로그램으로"/clr"컴파일러 설정)

일반적인 행동:응용 프로그램이 시작을 사용하여 30MB(개인 메모리에서).그때 메모리 누수 slowish,말 MB 매 시간마다 실행하는 경우 아래에서 시뮬레이션 무거운 짐이다.이 시뮬레이션 응용되는 살 수 있습니다.

해봤을 사용하여 여러 가지 도구를 추적하는 메모리 누수 모두 포함 CRT 디버깅 물건과 함께 제공되는 Visual Studio CRT libs.나 또한 사용은 상업적인 누출 감지용 도구("메모리 검사기").

모두 보고서 무시할 수 있는 메모리 누수에 종료(몇 가지 작은 항목하는 금액을 몇 KB 는 나에 대해 걱정하지 않).또한,나는 볼 수 있습니다 실행하는 경우 추적된 메모리하지 않는 것 양하는(그래서 나는 그것을 믿지 않는 것은 단지는 메모리가 개최되는 만에 출시 응용 프로그램 종료).내가 주위에 얻을 5MB 의 상장 메모리(총>30MB).

도구(메모리 검사기)를 설치를 추적하는 모든 메모리 사용량을(를 포함하여 malloc,새로운,가상 메모리 할당 및 다른 많은 종류의 메모리 할당).기본적으로,모든 설정하는 메모리를 추적하는 선택되었습니다.

니다.순 이미지를 보고 그것을 사용하여 약 1.5MB 정도의 메모리(에서 성).

여기에 최종 정보의 비트:우리가 응용 프로그램의 버전으로 실행되는 네이티브를 콘솔 프로그램(순수한 기본지 CLR 모두에서).이 95%이와 같은 혼합 모드를 제 UI 물건입니다.이것을 보이지 않는 메모리 누수 모두에서,그리고 봉우리 주위에서 5MB 개인 바이트입니다.

그래서 기본적으로 무엇을 하려고 해요 전 여기에는 나는 생각하지 않는 모든의 네이티브 코드 메모리 누수.

또 다른 조각의 퍼즐:이 참조하는 메모리 누수 혼합 모드에서는 응용 프로그램 타겟팅할 때 2.0framework(나): http://support.microsoft.com/kb/961870

불행하게도 세부 사항은 듯이 스파 스 그래서 나는 확실하지 않다면 그것은 타당하다.았을 대상으로 시도 framework3.5 대신 2.0 지만 여전히 같은 문제를 가지고 있었습니다(어쩌면 내가 이것을 하지 않 오른쪽).

누군가가 어떤 제안이 있는가?

는 몇 가지 도움이 될 수 있:

  • 은 거기에 다른 어떤 종류의 메모리 할당을 나가지 않습니다.
  • 어떻게 그림을 추가하지 않을까?나의 5 메가바이트 CRT 메모리 사용량,1.5MB.NET 메모리 그래서 어떻게 전체 응용 프로그램을 사용하 30MB 개인 바이트?모두 묶.NET framework?시지가 표시되지 않는 이유는 무엇이 누구입니까?이 부과될 수 있습니다.NET framework 으로 나타나 어떤 종류의 메모리를 할당?
  • 다른 누출 탐지구과 함께 사용할 수 있는 혼합 모드 앱?

어떤 도움을 주셔서 감사합니다

John

도움이 되었습니까?

해결책

좋아요 마지막으로 문제를 발견했다.

에 의해 발생했는 잘못된 설정에 대한/EH(예외 처리).

기본적으로는 혼합 모드입니다.NET 수 있는지 확인해야 모든 정적으로 링크 라이브러리에는 컴파일한 EHa 신의 기본/EHs.

(응용 프로그램 자체가 또한 컴파일한 EHa 지만,이것은 주어-컴파일러가 보고서 오는 경우에 당신은 그것을 사용하지 않는다.문제입니다면 당신은 링크에서 다른 정적 native libs.)

문제는 예외에서 잡히 관리되는 비트,응용 프로그램의 던져진 내에서 네이티브 라이브러리를 컴파일한 EHs 끝나지 않는 예외 처리를 올바르게.소멸자를 위한 C++개체지 않은 다 불렀습니다.

내 경우에는,이것만이 발생한에서 희귀한 장소,따라서 그것이 왜 나를 데려 연습니다.

다른 팁

다음과 같 Spence 말하고 있었지만,C++;)....

어떤 객체에 사용하는 C++/CLI,을 만드는 경우는 객체의에서 당신 C++코드를 사용해야 합 스택 할당 seymantics 더라도,이것은 컴파일러는 마법의 종류는 것,그것이 설정할 수 있는 중첩__try{}__finally{}문을 사용할 수 있습에서 사용하여 기본 코드(에 설치되는 방식으로 그들을 풀지 않 전화를 폐기하).

의 조도 문서에서 프로젝트는 여기에서 코드 C++/CLI 스택 할당을 의미는 매우 좋로에 대한 깊이 에뮬레이션하는 방법을 사용하여{}.

당신은 또한 삭제할 수 있는지 확인하십시오 모든 물체는 implment IDisposable 으로 당신을 호출 할 수 없습니다 처분에서는 C++를 사용하여 삭제,이것은 당신을 위해,당신의하지 않을 사용하여 스택을 의미..

나는 일반적으로 통화를 가까이에 자신을 스트림 및 할당 하려고 하러나 이 주제는 이 라이브러리할 때 나는 완성되는 객체의 경우에.

하고 싶을 수도 있습 확인 이 문서에서 메모리 문제,perticularly 이벤트에 대해 가입자에 할당하는 경우에는 이벤트의 객체할 새...

마지막으로(또는 아마도 첫째),중 하나는 일은 내가 짓는 것입니다 과거에 사용 CLR 프로파일러 API, 여기에 또 다른 문서 이렇게 하는 방법에는,저자의 작가(제이 Hilyard)예를 가지고는 답변;

  • 의 각.NET 형식을 사용하는 방법 많은 개체는 인스턴스가 되는 할당?
  • 얼마나 큰 인스턴스 의 각 유형?
  • What 알림 는 GC 제공으로 그것은 간다 를 통해 가비지 컬렉션은 무엇 을 찾을 수 있습니까?
  • 언제 GC 수집하는 개체를 인스턴스가?

해야 당신을 얻을 보다 더 좋은 아이디어가 어떤 상품 프로파일러 나가는 것을 발견될 수 있는 때때로 오해의 소지가에 따라 할당 porofile(btw.에 대한 조심 큰 객체를 힙 문제>~83kb 객체를 특별히 처리되는 경우에,나는 추천을 받고,밖으로 큰 객체를 힙:).

주어진 귀하의 의견이 몇 가지 더 많은 것을...

나는 게시하기 전에 이미지에 대해 로드하지 않는 충전 할당량 또는 다른 disernable 통계,이것이 의미하는 것이 필요할 수 있습을 추적하는 일부를 아래로 처리하거나 로더는 문제에 대한(로더 잠금 결국),하지만 그 전에 시도할 수 있습니다 설정 제한된 실행 영역, 그들은 기적을 행할 수 있습니다,그러나 또한 불행히도 어려운 복고풍에 맞는 비 순수한 코드입니다.

이 최근의 MSDN Mag, 기사 문서의 많은 성형 메모리 sperlunking(에 대한 후속 이전).

대 Perf 블로그, 그들은 사용하는 방법을 보여줍 SOS visual studio 할 수있는 편리하게,추적하는 루즈 DLL,관련 게시물은 또한 좋다.

Maoni 스티븐 블로그회사, 그는 말 그의 성능 팀이지만,근본적으로 100%의 자신의 게시물에 대하여 GC 그래서 그의 잘 쓴다.

릭 바이어스 dev CLR 진단의 많은 팀 그의 블로그-친구들은 또한 좋은 소스의 그러나 나는 것을 강력하게도 추천하는 아주 새로운 dev/포럼을 진단.그들은 최근의 범위가 확대되는 그들의 토론합니다.

코드 검사 도구추적 는 데 도움이 될 수 있습을주고,당신의 개요는 실제로 실행됩니다.

(구체적으로,그 perticular 계의를 부여하지 않을 수 있습을 전체적으로 무엇입 plauging 코드,내가 말할 수 있는 최근,내가 찾(도니다.net4beta 바이너리,프로파일러에서 이 회사, 은 아주 좋은,그것의 가능한 파생되는 기본/관리되는 누수의 그것에서의 프로필 추적이,당신을 제공하는 정확한 소스 라인(는 경우에도 최적화,매우 니스(그리고 그것에는 30 일 평가판)))).

좋은 행운을 빕니다!희망의 어떤이는 데 도움이,그것은 단지 신선에서 내 마음,내가 하는 많은 동일한 작업을 지금;)

도 아웃: DebugDiags.
후에는 생성하는 메모리를,그것은 당신에게 좋은 여름의 무엇을 메모리에 할당되었고,따라서 찾기 PDB,그것은 당신에게 말할 수 있가 할당됩니다.

수 있는 기준 누설,으로 보는 개미 프로파일링 소프트웨어입니다. 개미 프로파일

참고 누설입니다.net 해당하는 메모리 누수,당신은 당신에 대한 참조를 가지는 개체를 중단되고 쓰레기를 수집하고,따라서 당신은 메모리를 사용하여 이동하기 시작합니다.

그것은 가능한 한 당신이 어떤 음식물처리기,경우에 발생할 수 있습니다 당신의 GDI+를 사용하여 그리고 많은 다른 Api.

실행하는 경우 정적 분석 도구 FXCop 그것은 규칙을 확인한 경우라고 폐기(또는 사용한"사용")문의체는 인터페이스를 제공합니다.습니다.Net 경우 기능을 사용하여 관리되지 않는 코드 그것은 일반적으로 제공하는 폐기 또는 가까운 방법은 당신이 누출되지원/메모리입니다.

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