Microsoft MVP성태의 닷넷 이야기
글쓴 사람
포플러 (myprimo at naver.com)
홈페이지
첨부 파일
 

안녕하세요?
저는 C#으로 이런저런 프로그램을 만들고 있는 직장인입니다.
이번에 회사에서 C#으로 프로그램을 개발하여 사용하고 있습니다.
그런데 평소에 잘 돌다가도 어느 순간 확 느려지는 현상이 있거나 화면이 멈춰버리는 현상이 일어납니다.
주기는 일정치 않으며 하루에도 한두번 나오거나 며칠에 나오거나 합니다.
하지만 프로그램을 지속적으로 많이 사용했을 때 나오긴 합니다.

메모리와 CPU를 체크해도 문제가 없어보입니다. 정상적인 CPU 사용량을 보이고 있고 메모리 할당도 안정적입니다.
그런데 작업관리자를 지켜보면 윈도우 핸들이 지속적으로 늘어나는 걸 볼 수 있습니다.
윈도우 핸들이 늘어난다는 건 아무래도 메모리 릭이 일어날 수 있다는 거겠지요?

프로그램의 구조를 간단히 말씀드리면 메인폼 한개와 팝업을 위한 공통폼을 가지고 있으면 나머지 화면들은 모두 UserControl로 생성하여 팝업을 호출할 때마다 UserControl을 동적으로 호출하여 컨트럴에 넣어줍니다.
팝업은 수시로 떴다 닫혔다를 반복하고 있습니다.
이러한 구조가 문제가 될 수 있을까요?

그리고 Entity를 Class로 생성하여 데이터를 주고 받고 하는데 이 때도 수시로 Instance가 생성되는데 이것 또한 윈도우 핸들 증가를 가져올 수 있을까요?

순간 멈춤이나 속도 느려짐이 도대체 어디에서 오는지 감이 오질 않네요. 메모리, 쓰레드, CPU는 작업관리자만 본다면 안정적인데 말이죠.

이리저리 찾아 보다가 이렇게 질문들 남깁니다.
프로그램 소스를 보지 않고서야 명확한 답변을 할 수 없겠지만서도 위와 같은 현상의 원인 어디에서 오는지 예상되는 생각이 있다면 답변 부탁드립니다.

감사합니다.








[최초 등록일: ]
[최종 수정일: 7/2/2017]


비밀번호

댓글 작성자
 



2017-07-02 02시17분
윈도우 핸들이 지속적으로 늘어나는 것은 분명 누수가 있다는 것이고 화면이 멈출 수 있습니다.

UserControl을 동적으로 생성한다고 했는데, 그럼 그 UserControl에 finalizer를 넣고 로그를 남겨보세요. 만약 로그가 남는다면 누수가 있긴 하지만 GC에 따라 그 시기만 늦춰지는 것이니 화면이 멈추는 정도까지는 가지 않을 수 있습니다. 반면 로그가 남지 않으면 분명히 해당 UserControl에 대한 인스턴스가 어떤 식으로든 풀리지 않는 것이기 때문에 심각한 누수에 해당합니다. (그렇긴 한데... 이상하군요. 보통 그런 경우 핸들과 함께 메모리도 늘어나야 정상인데.)

Entity가 문맥상 어떤 것인지 없어서 알 수 없지만 그냥 POCO class를 의미하거나 특별히 윈도우 자원을 담지 않는 것이라면 당연히 윈도우 핸들 증가와 상관없습니다.

윈도우 덤프를 분석하실 수 있다면 이런 경우 프로그램이 멈췄을 때 덤프를 남겨보세요.

코드(C#)를 통한 풀 덤프 만드는 방법
; http://www.sysnet.pe.kr/2/0/995

문제를 해결할 수 없다면 외부에서 기술 지원을 받는 것이 좋습니다. (가령, Microsoft의 경우에도 기술 지원을 제공하며, 대개의 경우 덤프를 떠서 보내달라고 합니다. - 물론, 유료입니다.)
정성태
2017-10-26 05시18분
[최닷넷] 폼 열고 닫고가 빈번하면 사용했던 리소스가 제대로 Dispose되거나 DBConnection 또는 IO가 제대로 Close되고 있거나
하는지를 체크해야 합니다. 맴버변수들은 특히 Form.Closing 이벤트 함수에 또는 Dispose를 구현하여 이부분들을 귀잖아도
작성해 주는게 좋습니다. 그리고 사용이 마무리된 맴버번수는 null로 다 활당해 주면 좋겠죠.
사용했던 리소스만 잘해도 좋은 성능을 보장받을수 있기때문에 객체의 생성자 만큼이나 소멸자에도 신경을 써주는게 좋겠습니다.
[guest]
2019-03-16 11시26분
[1234] c# 자체가 메모리를 많이 사용해서 데이터 베이스나 소켙을 장시간 사용시 보통 프로그램보다 리소스 낭비가 심합니다
c#에서는 시간이 많이 걸리거나 메모리를 크게 잡거나 반복해서 여러가지 폼이나 창을 자주 열었다 닫았다 하는게 안좋습니다
같은 창을 보였다 안보였다 하는게 낫죠 그리고 닫았다고 생각하지만 메모리가 안줄어들면 안 닫힌것일수도 있죠
[guest]
2019-03-18 09시24분
@1234 CLR이라는 VM의 운영 특성상 기본 메모리가 잡히는 것은 있지만 C# 자체가 메모리를 많이 사용한다는 말은 완전히 틀린 말입니다. VM 언어 계열 중에 C#(닷넷)만큼 메모리 활용이 좋은 것도 드물 것입니다.

그리고 데이터베이스나 소켓을 장시간 사용시 보통 프로그램보다 리소스 낭비가 심하다는 것도 틀립니다. 그런 건 대부분 느낌적인 부분에 해당하고 실제로는 일반적인 TCP/IP 자원 소비와 비교해 부하는 거의 없습니다. 단지 DataSet과 같이 편리하게 만들어진 타입들을 사용한다면 거기서 메모리 사용이 있겠지만 그걸 낭비라고 보기는 어렵습니다. DataSet과 같은 코드를 다른 언어에서 구현한다면 역시 동일하게 메모리 사용이 발생할 수 밖에 없습니다.

또한 시간이 많이 걸리거나 메모리를 크게 잡거나 반복해서 여러가지 폼이나 창을 자주 열었다 닫았다 하는 게 안 좋은 것은 분명히 코드 상에 메모리 릭을 발생하는 부분을 넣은 개발자의 잘못일 확률이 높습니다. 제대로 만들었다면 아무리 열었다 닫았다 해도 별 차이가 없습니다.

물론, 닷넷의 특성을 잘 이해하지 못해 발생하는 경우도 있습니다.

WPF의 Window 객체를 생성했는데 GC 수집 대상이 안 되는 이유
; http://www.sysnet.pe.kr/2/0/11310

위와 같은 식으로 모든 것들이 래핑되어 있기 때문에 내부를 모르게 되고 그 과정에서 누수가 발생할 확률이 C/C++와 같은 언어에 비해 큰 것입니다. 순수하게 다음의 코드에서 시작해,

윈도우 폼을 열고 닫는 것만으로 메모리 leak이 발생할까?
; http://www.sysnet.pe.kr/2/0/1142

자신의 코드를 추가하면 메모리 릭이 없습니다. 만약 발생한다면 대부분의 경우 그건 자신의 코드 잘못일 확률이 높습니다.
정성태

... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...
NoWriterDateCnt.TitleFile(s)
239장강현9/14/200514936SmartClient에서의 배포 문제에 대해 [2]
238이순원9/13/200510320디버깅 할때 native 옵션껐는데두 너무 느려요.. [1]
236코디9/12/200510251[질문]런타임 보안 배포 [1]
237코디9/13/200510833    답변글 [재질문]: [질문]런타임 보안 배포 [1]파일 다운로드1
235임은선9/9/200512865스마트 클라이언트 배포시 환경파일인 app.config는 어떻게 배포 해야하나요...? [2]
234임은선9/7/200511655스마트 클라이언트 보안문제관련해서 질문이 있습니다.. [2]
233이한욱8/31/200519690가상 시리얼 포트(Virtual COM Port) 만들기 [1]
232정준명8/30/200511327[질문] HTTP 모듈/핸들러 또는 RewriteURL 관련입니다. [4]
231이진일8/30/200510445참조한 dll 들은 어떻게 배포하나요...? [1]
2303028/29/200511270[질문] 웹에서 Exchange Server 사용자 추가 [2]
229김재명8/26/200510893성태님의 홈페이지 J & J의경우 보안모듈을 어떻게 해결하셨는지 궁금합니다. [1]
227임규진8/24/200510737리소스 파일에 그림 첨가하는 방법 좀 알려 주세요. [1]
226최인호8/19/200510777스마트 클라이언트 exe 버젼 실행시 시간이 너무 오래 걸립니다. [1]
225코디8/17/200510975[질문]닷넷프레임워크 설치여부 [1]
224박준현8/17/200510536[질문]중첩 그리드라고 해야 할까요? [1]
223매커7/28/20059955강좌 잘 읽었습니다. [1]
222김지영7/27/200511422C#에서 oledb 사용하다가 에러 [2]
221박민우7/26/200511998스마트클라이언트에서의 DB접속 [1]
220테드7/22/200510927스마트 클라이언트에서 원치 않는 패킷 송수신 문제... [3]
219김종욱7/21/200511411안녕하세요... 툴밴드 콤보 박스에 대해.. [1]
2187/21/200510040스마트 클라이언트에 대한 질문 입니다. [1]파일 다운로드1
217왕초보7/21/200510658마소강좌의 AxForSmartClient 를 실행시키고 싶은데요... [1]
215궁금증6/23/200510143도대체 이게 무슨 에러 일까요... [1]
213궁금이6/18/200511836Winform 형태의 NTD에서 사용자 로그인 성공 여부 정보 유지하는 방법 [1]
212궁금이6/16/20059844ActiveX 컨트롤이 NTD에 이상이 없는지요? [1]
211류성태6/15/200510389smart client에 관하여.... [1]
... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...