[완료] ODBC 프로그래밍 질문입니다.
글쓴이: ljs0766 / 작성시간: 화, 2008/03/04 - 10:06오후
MSSQL 2000을 이용하여 작업을 할 일이 있어서 ODBC를 이용해서 프로그램을 만들었는데
어느정도 DB 연산을 하다보니 HY001 메모리 할당 오류가 발생하더군요.
우선 프로그램이 시작하면 먼저 DB에 연결을 유지한 상태로 작업을 하는데
제 생각은 DB에 연결을 유지한 상태로 계속해서 쿼리를 날리면 안될 듯 합니다.
DB_Connect()->ExecSQL()->DB_Disconnect()
이런 형태로 프로그램이 작성되어야 할 듯 한데
구글링을 해보아도 HY001 메모리 할당 오류에 관한 레퍼런스가
거의 없더군요.
제 생각이 맞는 건지 궁금하군요.
의견 부탁드립니다.
Forums:
재 connection 하는 비용은 많이 듭니다.
재 connection 하는 비용은 많이 듭니다.
부하가 상관 없다면 저런 식으로 코딩해도 상관은 없겠구요.
저의 경우
문제가 됐던건 mysql의 경우 time_out때문에
mysql 옵션 설정을 하거나.. ping 을 날려주는 귀찮은 작업으로
connection이 다른 환경에 의해 끊기지 않게 유지를 시켜줬습니다만...
저부분 빼곤 connection 을 유지하고 계속 쿼리를 날려도 문제가 없습니다.
언제 고수되나.
제가 삽질한거였습니다. -ㅁ-;
ODBC의 옛날버젼 API와 최신버젼(?) API를 혼용해서 썼더니..
메모리가 제대로 해제가 안되서 저런 문제가 생겼더군요;;
DB쪽 프로그래밍은 처음인지라 많이 헷갈리네요 ^^
ODBC 버전 어느것이 메모리 Leak이 있는지 알려주세요.
無욕지행
ODBC어떤 버전이 메모리릭이 있는지 알려주세요...
無욕지행
예를들어..
SQLAllocHandle( )로 할당한 Statement를
SQLFreeStmt로 해제하려고 했을 경우 해제가 안됩니다.
즉 SQLAllocHandle로 할당한 핸들러들은 SQLFreeHandle로 해제 해주어야 합니다.
기존에 사용하던 SQLFreeStmt와 같은걸로 해제를 시도하면
메모리 해제가 안되고 메모리 누수가 발생하더군요.
예를들어..
SQLAllocHandle( )로 할당한 Statement를
SQLFreeStmt로 해제하려고 했을 경우 해제가 안됩니다.
즉 SQLAllocHandle로 할당한 핸들러들은 SQLFreeHandle로 해제 해주어야 합니다.
기존에 사용하던 SQLFreeStmt와 같은걸로 해제를 시도하면
메모리 해제가 안되고 메모리 누수가 발생하더군요.
댓글 달기