2010-05-26 2 views
2

방금 ​​누출을 감지하기 위해 FastMM4를 사용했습니다. 우리 응용 프로그램이 이벤트 핸들을 새고 있던 DLL을 사용하고 있었기 때문에 FastMM4에 의해보고 된 누출을 수정했으나 핸들은보고되지 않았으므로이를 수정하지 못했습니다.Fastmm4 및 새는 핸들

내 질문에, FastMM4가 새는 이벤트 핸들을보고 했을까요? 이렇게하면 FastMM4가 포함 된 DLL을 다시 작성해야합니까? 나는 또한 누군가가 ShareMM을 언급하는 것을 들었다, 나는 그것을 추가 할 필요가 있는가?

나는 borland 메모리 관리자를 사용하고 있다고 생각하는 Delphi2007을 사용하고 있으며, 그렇다면 fastMM4 메모리 카드로 교체해야합니까? 그렇게하기위한 단계는 무엇입니까?

많은 질문을 드려 죄송합니다. 저는 닷넷 개발을 몇 년 동안 해본 결과 델파이를 찾고 있습니다.

JD.

답변

7

No. FastMM은 메모리 관리자로, 응용 프로그램이 FastMM을 통해 할당 한 메모리 누수 만보고 할 수 있습니다. 핸들은 Windows에서 할당 한 시스템 오브젝트에 대한 불투명 한 참조이므로 FastMM은이를 추적 할 수 없으며 다른 델파이 메모리 관리자도이를 수행 할 수 없습니다.

.NET의 가비지 수집이 FastMM보다 더 나은이 문제를 해결할 수 없었기 때문에 이것은 실제로 Delphi와 .NET 사이의 문제가 아닙니다. 핸들은 메모리가 아닌 리소스이므로 .NET에서와 같은 방식으로 리소스를 유출하지 못하도록해야합니다. 리소스를 할당 한 항목이 모두 완료되면이를 해제해야합니다.

누출되는 핸들 유형을 알고 있습니까? 유비쿼터스 HWND보다 덜 일반적이라면 문제를 추적하는 좋은 출발점이 될 것입니다. 핸들의 유형을 어디에 할당하고 있는지 찾아야합니다.

다른 질문으로, Delphi 2007에 대해서는 이전의 BorlandMM이 아닌 FastMM이 내장되어 있습니다. 그러나 그것은 일종의 기본 버전입니다. FullDebugMode 기능에 액세스하려면 SourceForge에서 FastMM을 다운로드하고 의 맨 위에 추가하려면 목록을 사용하고 FullDebugMode 컴파일러 정의를 사용하여 다시 빌드해야합니다.

+0

메이슨 감사합니다. 우리는 Windbg를 시도하고 Event 유형의 핸들이 새는 것을 발견했습니다. 나는 그것을 DLL에 있던대로 고칠 수 있었고 이제 그들은 누출을 멈췄다. 나는 일반적으로 fastmm4.dll로 fastmm.dll을 대체해야 하는가, 아니면 fastmm4.pas에 대한 참조로 코드를 재 컴파일해야 할 것인가, 현장에서 나가는 응용 프로그램에 대해 더 나은 메모리 관리를 위해 FastMM4.dll을 사용해야한다고 들었다. –

+0

나는 fastmm dll이 있는지 몰랐다. FullDebugMode는 고급 분석을 위해 dll을 사용하지만 메모리 관리자 자체는 몇 개의 pas 파일과 포함 파일이며 기본 기능은 Delphi 2007에 내장되어 있습니다. D2007에서 다시 컴파일하면 DLL이 명시 적으로 사용되지 않는 한 FastMM이 활성화됩니다 대체 메모리 관리자를 사용합니다. –

+0

죄송합니다. 정보를 제공해 주셔서 감사합니다. –