글
Technical Article/펌 2007. 1. 16. 22:09OLEDB CMultipleResults memory leak(메모리누수) 발생!!
[테스트 환경]
MSSQL2000에 OLEDB로 ATL을 이용하여 접근
개발환경은 .Net2005, VS6 2가지 버젼을 사용해서 테스트
-- 테스트용 Stored Procedure
CREATE PROCEDURE sp_ResultParamIO
@num int,
@Ret int OUTPUT
AS
BEGIN
select * from UserInfo where ID = @num
Set @Ret = 99
END
위와같은 2가지 결과를 가지는 SP(이하 Stored Procedure)에서는
다음과 같이 구성할수 있다.
CCommand<CAccessor<CResultParamIO>, CRowset, CMultipleResults> cmdSP;
즉, 로우셋을 가지고 결과가 여러개로 되기 때문에
Cmd.GetNextResult(NULL, true);
를 통해서 @Ret값을 받을수 있게된다.
근데 문제는 CMultipleResults를 붙이게 되면 cmdSP를 호출할때마다
메모리가 늘어나게 된다.
혹시나 OLEDB의 컨넥션풀이나 메모리풀과 관련되었나 싶어서 물리적메모리와
가상메모리가 다 할때가지 기다려봤는데 줄어들지 않았다 -_-
이와같은 문제를 해결하고자 MS문서를 찾아봤는데 UDL파일이나 컨넥션 스트링을 이용한
leak나는 부분이 patch됐다는 사실을 알고 이를 수정해보았으나
여전히 누수가 존재했다 -_-....
데브피아와 여타 개인사이트들, 뉴스그룹을 통해 찾아본 결과
이는 CMultipleResults의 버그라고 볼수 밖에 없다 -_-;;
누구 아는분 있으면 해결책을 제시해 주시오 ㅡㅠ.....
이때문에 SP를 2개로 구성해서 하나 받고 또받고
이런 더러운 구조로 개발을 종료한다.
[참고자료]
OLE DB ? ATL Consumer Templates and “Memory Leaks” · Thu Mar 25,
http://exold.com/article/ole-db--atl-consumer-templates-and-memory-leaks-
BUG: Memory Leak in ATL OLE DB Consumer Template Functions
http://support.microsoft.com/kb/271926
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=5204&ref=1760
http://www.google.co.kr/search?sourceid=navclient&hl=ko&ie=UTF-8&rlz=1T4GGLG_ko___KR204&q=msdn+GetNextResult
http://www.google.co.kr/search?hl=ko&newwindow=1&rlz=1T4GGLG_ko___KR204&q=CMultipleResults&lr=
http://dbforums.com/archive/index.php/t-481961.html
http://msdn2.microsoft.com/en-us/library/ms713643.aspx
RECENT COMMENT