디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

c#과 파이썬 openCV 메모리 질문

프갤러(14.52) 2025.06.17 10:54:15
조회 171 추천 0 댓글 2

C# WPF를 이용해 cctv 제어 관리 프로그램을 만들고 있습니다.


i5-14세대(내장 그래픽), 램 32기가, SSD 1테라, 파워 700W정도 스펙의 컴퓨터를 사용중입니다

OS는 윈도우이며 간섭이 생길걸로 예상되는 프로그램은 없습니다(기본 상태에서 닷넷런타임, 안랩만 설치)


프로그램은 의도한대로 동작하자, 장시간 켜두면 점점 사용 메모리량이 증가되다가, 최대치를 찍었을때 강제 종료되는 문제가 있었습니다.

첫 실행후 30분~1시간정도는 200~500mb를 유지하다가, 그 이후부터 조금씩 늘어납니다.


RTSP로 카메라 2~4대를 연결하고 실시간으로 조회하고 있는 상태이며

카메라는 1대만 FHD, 나머지는 HD로 세팅해두었습니다 (비트레이트는 기본값인 '적정/보통')

인코딩은 H.264로 하고 있습니다 (265로 하면 cpu 자원을 많이 먹는다 하여 264로 했습니다)


문제는 N100, 램 16기가, SSD 512기가 미니PC에서는 램은 많이 먹을지언정 강종 없이 몇개월이상 정상동작하고 있는데요


시험삼아서 저가 그래픽카드(1050, 1060등)을 꽂아보니 매모리 누수로 추정되는 증상이 없어지고

강종없이 몇주간 정상동작되는걸 확인했습니다.


현재는 사용하는 PC에 1060 6gb를 추가하여 사용하고 있습니다.



잘 이해가 되지 않아서, 16기가램+ssd512는 동일하게 하되 다른 cpu로 테스트해보았습니다


i5-14세대(내장 그래픽) -> 메모리 누수 발생

i5-12세대(내장 그래픽) -> 메모리 누수 발생

5600g(내장 그래픽) -> 메모리 누수 발생 x

6600H(내장 그래픽) -> 메모리 누수 발생 x

7735hs(내장 그래픽) -> 메모리 누수 발생 x

i5-12세대+1050 3gb -> 메모리 누수발생 x


이래서 그냥 저 혼자 생각으로 그래픽처리가 제대로 안되어서 그렇다고 결론을 내렸는데요



이후 파이썬을 다루게 되어, 파이썬으로 위에서 사용한 프로그램을 클론하여서 만들고 있었는데

메모리 누수가 발생한 i5-12세대에서 낮은 램 사용량(100~300mb미만)을 유지하며 며칠을 켜두어도 이상이 없었습니다.


그렇다면, C#으로 코딩한 프로그램을 제대로 못 만들었기 때문이라고 밖에 생각할 수 없더라구요

그게 아니면 파이썬에서 비디오 관련 램처리를 자동으로..... 해주는거 같진 않지만...


다른델 찾아보아도 별다른 답변아ㅣ 없어서 남겨봅니다.






코드는 제가 코딩한 것 과 검색해서 찾은 걸 조합해서 만들어져 있고

지피티 유료 모델, 클로드 유료 모델을 사용해봤으니 유의미한 결과는 못 얻었습니다






사용한 코드는 아래와 같습니다.

코드가 생각보다 길어져서, 영상 실패시 초기화 및 재시도하는 부분은 제거해두었습니다





    private void CCTV_RUN(int index)

    {

        Mat mat = null;

        VideoCapture capture = null;


        try

        {


            int openFailCount = 0;


            string addr = "rtsp 주소";


            if (string.IsNullOrEmpty(addr)) return;


            capture = new VideoCapture();

            capture.Open(addr;


            DateTime lastResetTime = DateTime.Now;


            while (cctvRuns[index])

            {

                try

                {                   

                    mat = new Mat();

                    bool hasFrame = capture.Read(mat);


                    if (!hasFrame || mat.Empty())

                    {

                        mat.Dispose();

                        capture?.Release();

                        capture?.Dispose();

                        capture = new VideoCapture();

                        Thread.Sleep(1000);

                        continue;

                    }


                    lock (ScenLock[index])

                    {

                        LastScen[index]?.Dispose();

                        LastScen[index] = mat.Clone();

                    }


                    while (VideoList[index].TryTake(out var oldMat))

                        oldMat.Dispose();


                    if (VideoList[index].Count < 1)

                        VideoList[index].Add(mat.Clone());



                    // 화면 출력용

                    Dispatcher.InvokeAsync(() =>

                    {

                        try

                        {

                            if (VideoList[index].TryTake(out Mat item))

                            {

                                try

                                {

                                    if (!item.Empty())

                                        images[index].Source = WriteableBitmapConverter.ToWriteableBitmap(item);

                                }

                                finally

                                {

                                    item.Dispose();

                                }

                            }

                        }

                        catch (Exception e)

                        {

                        }

                    }, DispatcherPriority.Background);


                    mat.Dispose();

                }

                catch (Exception e)

                {

                    Thread.Sleep(1000);

                    break;

                }

            }

        }

        finally

        {

            mat?.Dispose();

            capture?.Release();

            capture?.Dispose();

        }

    }






추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 해외에서 겪는 불합리한 대우에 대응 잘 할 것 같은 스타는? 운영자 25/11/03 - -
AD 저녁 뭐먹지? 오늘의 메뉴 추천! 운영자 25/10/31 - -
2865608 우리는 국가주도의 사상적 폭력을 너무 당연하게 생각함 [3] ㅆㅇㅆ(124.216) 06.19 101 0
2865607 <84제곱미터> 한대서 생각나는 예전 글 [1] 발명도둑잡기갤로그로 이동합니다. 06.19 69 0
2865606 이재명 덕분에 국비학원 미어 터질 듯 프갤러(112.216) 06.19 204 1
2865605 개발을 C++ 로 해야 하는 이유. [2] 프갤러(59.16) 06.19 159 0
2865604 정처기의 가장 큰 문제점은 사고의 프레임워크가 오염됨 [2] ㅆㅇㅆ(124.216) 06.19 176 1
2865603 미국이 망해도 재즈와 락과 힙합은 남을 거야 발명도둑잡기갤로그로 이동합니다. 06.19 73 0
2865602 취미가 직업이 되면 좆 같은 이유 [2] ㅇㅇ(223.38) 06.19 117 0
2865601 leekib 깃헙 친구 구해요 [1] 프갤러(211.187) 06.19 81 0
2865600 정처기 그대로 따라가면 그냥 틀딱 레거시 코드싸개 되는거임 [3] ㅆㅇㅆ(124.216) 06.19 136 1
2865599 꾹꾹이 마우스 발명도둑잡기갤로그로 이동합니다. 06.19 71 0
2865598 정처기 문제 자체가 그냥 답이 있는 문제를 낼려고 문제자체가 병신이잖아 ㅆㅇㅆ(124.216) 06.19 89 0
2865597 내 아를 나도 외치며 울었다 발명도둑잡기갤로그로 이동합니다. 06.19 93 0
2865595 사실 맨 먼스 신화에서 나오듯 사람 더 뽑는다고 [2] ㅆㅇㅆ(124.216) 06.19 73 0
2865594 좆소 개발팀 특 (경험담) [2] ㅇㅇ(223.38) 06.19 243 9
2865593 서명참여] 한일기본조약 60년, 한국과 일본의 시민들이 다시쓰는 한일 관 발명도둑잡기갤로그로 이동합니다. 06.19 88 0
2865592 나님도 대학생때 프밍 과목 C학점 맞았었제 류도그담당(58.239) 06.19 84 0
2865591 오늘 공무원 합격했다 질문받는다 [5] ㅇㅇ(122.42) 06.19 124 0
2865589 회사의 마지막 개발자는 곧 죽어도 안 짜르는 경향이 있는 듯 ㅇㅇ(223.38) 06.19 114 0
2865588 카드 돌려막기 중이라는 미국…빚이 5경 원이나 쌓인 진짜 이유|크랩 발명도둑잡기갤로그로 이동합니다. 06.19 83 0
2865586 김건희 볼 때마다 생각나는 거 발명도둑잡기갤로그로 이동합니다. 06.19 96 0
2865584 저번주에 kmp알고리즘 마스터 했는데 이번주에 까먹었다 [2] 헬마스터갤로그로 이동합니다. 06.19 82 0
2865583 요즘 제 일상이 식어가는 찌개 같습니다 [3] 아스카영원히사랑해갤로그로 이동합니다. 06.19 100 0
2865580 리눅스나 맥으로 개발하면 편함 프갤러(14.5) 06.19 70 0
2865578 중3 오유진 발명도둑잡기갤로그로 이동합니다. 06.19 72 0
2865577 김혜경씨랑 김건희씨 무수리와 마님같지않냐? [4] 헬마스터갤로그로 이동합니다. 06.19 98 0
2865575 유치원 교사 극한직업 발명도둑잡기갤로그로 이동합니다. 06.19 57 0
2865572 안드로이드 솔루션구조랑 잘짜는 강의없나 ㅇㅇ(14.35) 06.19 78 0
2865571 이재명 되고 25만원 받았는데 집값 몇억 올라서 세입자 월세 오르고 발명도둑잡기갤로그로 이동합니다. 06.19 101 0
2865568 컴공 학점 C 이상 받기 쉬워? [1] 프갤러(221.139) 06.19 116 0
2865567 유혀니 어디갔숴 [2] ㅇㅇ(211.234) 06.19 82 0
2865566 발명도둑잡기 싯팔련아 프갤러(106.101) 06.19 84 0
2865565 개병대 발명도둑잡기갤로그로 이동합니다. 06.19 58 0
2865564 Kassy(케이시) _ Let it rain(비야 와라) 발명도둑잡기갤로그로 이동합니다. 06.19 69 0
2865563 유료 챗지피티 무료로 쓰는 이 방법 진짜인가요? 발명도둑잡기갤로그로 이동합니다. 06.19 106 0
2865562 리눅스에서 dosemu, qemu, dosbox 속도 비교 발명도둑잡기갤로그로 이동합니다. 06.19 71 0
2865561 KolibriOS에서도 도스박스 가능 발명도둑잡기갤로그로 이동합니다. 06.19 65 0
2865560 구형 피씨에 sdl2 환경 구성할 가장 최소고 빠른 속도 나오는 방법 발명도둑잡기갤로그로 이동합니다. 06.19 78 0
2865559 DOSBOX 특화 리눅스 배포판 발명도둑잡기갤로그로 이동합니다. 06.19 72 0
2865556 마약, 알콜, 도박은 보건복지부 인정 3대 중독인데 게임은 중독이 아니고 [1] 발명도둑잡기갤로그로 이동합니다. 06.19 78 0
2865554 일 3개월차인데 집에서 공부 못하겠음 [2] ㅇㅇ(211.210) 06.19 103 0
2865552 내가 보수 공공재 성격으로 주작해보려고 넥도리아(175.196) 06.19 70 0
2865548 자바충은 다른 언어 배우는데 초심자보다 더 오래 걸린다. [6] 프갤러(223.32) 06.19 156 1
2865546 나 자바만 5년했는데 [2] ㅇㅇ(118.216) 06.19 131 0
2865543 이력서 열람하고 전화가 안오네 프갤러(125.133) 06.19 55 0
2865541 아스카는 왜 이렇게 똑똑할까 [6] 아스카영원히사랑해갤로그로 이동합니다. 06.19 120 0
2865540 내 친구 여친 생겼다길래 축하해줌 메쿠이로갤로그로 이동합니다. 06.19 87 0
2865539 나는 회사에서 네네 하는 스타일이 전혀 아니거든..? 아닌거같으면 .. 프갤러(175.197) 06.19 80 0
2865537 바이블에 나오는 근친상간 발명도둑잡기갤로그로 이동합니다. 06.19 81 0
2865536 부캠선택 도움좀 주실 선배림들 ㅠㅠ [2] Copilot갤로그로 이동합니다. 06.19 250 0
2865535 야기 미친넘들아 미국망해라 중국망해라 ㅇㅇ(118.235) 06.19 66 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2