ACTIVE SERVER PAGE > 레코드셋 가져올때 close 와 nothing을 해주어야 하는 이유
등록일 : 2021-03-13 15:50
조회수 : 95,157
태요 Q&A게시판에서 가져온 글입니다.
제가 처음 asp를 접했을때 이해가 안간부분 게시판에서 찾아보고 스크랩 해둔거 올립니다.
레코드셋 가져올때 close 와 nothing을 해주어야 하는 이유
[첫번째]
레코드셋 객체를 가져올때 open으로 열면 꼭 close해주고 nothing 해줍니다.
저거 쓰기 귀찮아서 (ㅡㅡ;;) 레코드셋 객체를 execute 메소드로 가져 옵니다.
execute 메소드는 단절된 레코드 셋으로 가져오고 나면 자동 연결이 끊기기 때문에 위에 작업을 안해줘도 된
다고 얘기를 듣고서 그렇게 처리해 왔습니다.
여직껏 잘 살다가(?) 문득 의문이 듭니다.
한페이지에서 여러번 execute 메소드를 쓴다면 서버의 메모리에 rs객체의 인스턴스가 남아있지 않을까?
그래서 많은 유저들이 몰린다면.. 서버의 메모리는?....
고수님들의 고견을 듣고 싶습니다.
답변1 : execute 로 열어도 close랑 nothing는 해줘야 된다고 생각하는데요...;;
답변2 : 원래 asp 는 파일이 닫히는 순간 객체가 자동소멸되기 때문에 님이 걱정하시는 일은 일어 나지 않습니다.
답변3 : 단지 조금이라도 빨리 메모리에서 없애고자 함입니다.
답변4 : 근데 가능하면 close 랑 nothing 는 해주세요... 안하다 보면 나중에 나쁜 습관으로 남습니다.
asp는 기본으로 파일이 닫힐때 객체를 반환해준다고 알려져 있잖아요
그래서 저도 그동안 execute 를 쓰고 close 와 nothing을 안해주었습니다.
요번에 프로젝트를 하면서 프로그램이 상당히 많이 들어가는 프로그램을 짰습니다.
디비를 상당히 많이 다루고 그래서 프로시져도 많이 생성하게 되었네요
버그 테스팅 기간에 문득 서버의 메모리를 보니깐 쫌 이상하다 싶을 정도로 메모리사용량이 많이 보이더군요
sql이 많이 메모리를 차지하고 있더군요
그래서 이쪽저쪽 질문도 하고 알아봤는데 결과는....이렇습니다.
1.ex ec u te 메소드를 활용하더라도 메모리는 반환되지 않는다는것
2.저장프로시저를 써도 디비가 재사용을 안하고 새로 메모리영역을 잡는다는것
(sql 서버의 기본적인 문제입니다. 메모리 할당량이 동적구성 최대로 되어있으면 최대까지 일단 메모리 계속
잡습니다.되도록이면 고정으로 잡아주는게 좋을것같습니다.)
3. in sert 나 up date시에 레코드셋이 메모리로 올라간다는점
대랙 세가지의 결과를 얻어냈습니다.
그래서 소스에 바로 적용해 보았습니다
close와 nothing을 해주고 insert,update시 레코드 생성안하기 상수도 써줬습니다.
결과는......
서버 재부팅 하고하룻동안 지켜본 결과 전에 메모리 증가율보다 무려 30%나 떨어졌습니다.
일단 제가 여기까지가 알아낸것이고요 고수님들의 다른 의견이 있으면 더 듣고 싶습니다.^^
taeyo 개발자가 반드시 지켜야 할 것 중에 하나입니다.. 2003-08-30 (07:45)
taeyo 아무리 강조해도 지나치지 않는 팁입니다... 팁이라기 보다는 룰에 가까운.. 2003-08-30 (07:46)
taeyo 다시 한번 일깨워 주셔서 감사합니다 2003-08-30 (07:46)
ghostkid 기본이긴 한데... 너무나 많은 코딩에 흔히 잊혀지기도 하져... 지금이라도 빨리 안 되어 있는거 체크해야 겠당... 2003-08-31 (19:03)
knhead 기본이 아니라.. 무언의 법칙 이라고 해야 겠죠.. 저 또한 동료의 실수로 서버가 일주일에 서너번 뻣는 일이 원인은 close와 nothing 를 안해 줘서 그렇죠 ㅡㅡ;; 2003-09-05 (19:15)