2013-05-13 4 views
0

dll에서 일부 레거시 코드를 사용하여 가공 된 제품을 테스트하는 응용 프로그램이 있습니다. 응용 프로그램을 다른 제품에 맞게 설정할 수 있습니다. 설정은 xml-files를 통해 이루어지며 실행 중, 즉 End-Of-Lot에서 변경할 수 있습니다. xml의 ​​처리는 언급 된 레거시 dll에 의해 수행됩니다.MSXML을 사용한 메모리 처리의 문제점

오랜 시간 (주일에서 수 주일) 실행 한 후에 증가하는 메모리 사용량을 확인했습니다. 그것으로 디버깅, 나는 (가능한) DLL에 누수를 추적 할 수 있습니다. 나는 이런 식으로 뭔가를 찾을 때까지 소스를 받고 후, 추가로 조사 할 수 있습니다 : 그것은 나에게 보인다

CAObjHandle doc; 
MSXML6_NewDOMDocument40IXMLDOMDocument2(0, 0, LOCALE_NEUTRAL, 0, &doc); 
[...] 
MSXML6_IXMLDOMDocument2load(doc, 0, vtPath, &success); 

,이 때마다 호출되어, 새로운 많은 시작됩니다. 그리고 이것은 메모리에있는 것처럼 보이는이 doc 구조입니다. 내가 풀려나는 곳을 찾지 못한다.

결국 DLL에는 해제되지 않은 개체 (CVI 기능)의 많은 사소한 누수가있었습니다. 나는 그것들을 고쳤지만,이 MS-Objects를 풀어 버리는 방법을 모른다. 나는 이걸 보았습니다 : Understanding the MSXML garbage collection mechanism, ANSI-C 코드를 작성한 후에, GC로 무엇을해야하는지, 작동하지 않는지, 확실하지 않습니다.

수동으로 MSXML 개체를 무료로 사용할 수있는 방법이 있습니까?

답변

0

좋아요, 답을 찾았습니다. MSXML6_* 개체는 CA_DiscardObjHandle()으로 할당 해제 될 수 있습니다.