디시인사이드 갤러리

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

갤러리 본문 영역

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

프갤러(14.52) 2025.06.17 10:54:15
조회 130 추천 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/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
2865627 구약에는 십일조가 있는데 신약에선 십일조를 나쁘게 봐서 구약을 못 버림 [2] 발명도둑잡기갤로그로 이동합니다. 06.20 54 0
2865626 "처음도 아니고 마지막도 아닌데 뭘"…트럼프 조롱에 마크롱 쿨한 반응 발명도둑잡기갤로그로 이동합니다. 06.20 71 0
2865622 이스라엘 핵보유 발명도둑잡기갤로그로 이동합니다. 06.20 47 0
2865621 홍진영-사람의 배터리 발명도둑잡기갤로그로 이동합니다. 06.20 78 0
2865620 403 권력이 부족합니다 [2] 헬마스터갤로그로 이동합니다. 06.20 76 0
2865619 건강에 500억 쓴 남자의 수면 루틴 발명도둑잡기갤로그로 이동합니다. 06.20 65 0
2865617 최근 광화문 성조태극기 파쇼 집회에 이스라엘기까지 든 사람 발명도둑잡기갤로그로 이동합니다. 06.20 63 0
2865616 4~50대를 극도로 혐오하는 이유 발명도둑잡기갤로그로 이동합니다. 06.20 66 0
2865615 중국 기술 블로그보는데 Moonbit라는 중국 최초 상업용 언어가 화제네 ㅆㅇㅆ(124.216) 06.20 75 0
2865614 해병대 개 학대 사건 보니 생각나는 예전 글 발명도둑잡기갤로그로 이동합니다. 06.19 81 0
2865613 재능이 없어도 [3] 루도그담당(58.239) 06.19 91 0
2865612 형이 어렸을때는 리눅스에서 c++로 개발함 [4] 프갤러(14.5) 06.19 110 0
2865611 그냥 매일 무력하고 벽에 부딪힌 느낌임 [3] ㅆㅇㅆ(124.216) 06.19 106 0
2865610 세상이 너무 밉다. 그냥 나도 더 큰 세계 더 큰 경치를 보고 싶다 [4] ㅆㅇㅆ(124.216) 06.19 89 0
2865609 C++ 로 개발하면 호환성 문제가 있지 않슴니까? [1] ㅇㅇ(223.38) 06.19 88 0
2865608 우리는 국가주도의 사상적 폭력을 너무 당연하게 생각함 [3] ㅆㅇㅆ(124.216) 06.19 75 0
2865607 <84제곱미터> 한대서 생각나는 예전 글 [1] 발명도둑잡기갤로그로 이동합니다. 06.19 35 0
2865606 이재명 덕분에 국비학원 미어 터질 듯 프갤러(112.216) 06.19 130 1
2865605 개발을 C++ 로 해야 하는 이유. [2] 프갤러(59.16) 06.19 110 0
2865604 정처기의 가장 큰 문제점은 사고의 프레임워크가 오염됨 [2] ㅆㅇㅆ(124.216) 06.19 111 1
2865603 미국이 망해도 재즈와 락과 힙합은 남을 거야 발명도둑잡기갤로그로 이동합니다. 06.19 51 0
2865602 취미가 직업이 되면 좆 같은 이유 [2] ㅇㅇ(223.38) 06.19 81 0
2865601 leekib 깃헙 친구 구해요 [1] 프갤러(211.187) 06.19 53 0
2865600 정처기 그대로 따라가면 그냥 틀딱 레거시 코드싸개 되는거임 [3] ㅆㅇㅆ(124.216) 06.19 96 1
2865599 꾹꾹이 마우스 발명도둑잡기갤로그로 이동합니다. 06.19 46 0
2865598 정처기 문제 자체가 그냥 답이 있는 문제를 낼려고 문제자체가 병신이잖아 ㅆㅇㅆ(124.216) 06.19 61 0
2865597 내 아를 나도 외치며 울었다 발명도둑잡기갤로그로 이동합니다. 06.19 60 0
2865595 사실 맨 먼스 신화에서 나오듯 사람 더 뽑는다고 [2] ㅆㅇㅆ(124.216) 06.19 62 0
2865594 좆소 개발팀 특 (경험담) [2] ㅇㅇ(223.38) 06.19 160 9
2865593 서명참여] 한일기본조약 60년, 한국과 일본의 시민들이 다시쓰는 한일 관 발명도둑잡기갤로그로 이동합니다. 06.19 67 0
2865592 나님도 대학생때 프밍 과목 C학점 맞았었제 류도그담당(58.239) 06.19 58 0
2865591 오늘 공무원 합격했다 질문받는다 [5] ㅇㅇ(122.42) 06.19 74 0
2865589 회사의 마지막 개발자는 곧 죽어도 안 짜르는 경향이 있는 듯 ㅇㅇ(223.38) 06.19 85 0
2865588 카드 돌려막기 중이라는 미국…빚이 5경 원이나 쌓인 진짜 이유|크랩 발명도둑잡기갤로그로 이동합니다. 06.19 64 0
2865586 김건희 볼 때마다 생각나는 거 발명도둑잡기갤로그로 이동합니다. 06.19 63 0
2865584 저번주에 kmp알고리즘 마스터 했는데 이번주에 까먹었다 [2] 헬마스터갤로그로 이동합니다. 06.19 63 0
2865583 요즘 제 일상이 식어가는 찌개 같습니다 [3] 아스카영원히사랑해갤로그로 이동합니다. 06.19 68 0
2865580 리눅스나 맥으로 개발하면 편함 프갤러(14.5) 06.19 54 0
2865578 중3 오유진 발명도둑잡기갤로그로 이동합니다. 06.19 47 0
2865577 김혜경씨랑 김건희씨 무수리와 마님같지않냐? [4] 헬마스터갤로그로 이동합니다. 06.19 84 0
2865575 유치원 교사 극한직업 발명도둑잡기갤로그로 이동합니다. 06.19 42 0
2865572 안드로이드 솔루션구조랑 잘짜는 강의없나 ㅇㅇ(14.35) 06.19 48 0
2865571 이재명 되고 25만원 받았는데 집값 몇억 올라서 세입자 월세 오르고 발명도둑잡기갤로그로 이동합니다. 06.19 89 0
2865568 컴공 학점 C 이상 받기 쉬워? [1] 프갤러(221.139) 06.19 75 0
2865567 유혀니 어디갔숴 [2] ㅇㅇ(211.234) 06.19 65 0
2865566 발명도둑잡기 싯팔련아 프갤러(106.101) 06.19 54 0
2865565 개병대 발명도둑잡기갤로그로 이동합니다. 06.19 45 0
2865564 Kassy(케이시) _ Let it rain(비야 와라) 발명도둑잡기갤로그로 이동합니다. 06.19 44 0
2865563 유료 챗지피티 무료로 쓰는 이 방법 진짜인가요? 발명도둑잡기갤로그로 이동합니다. 06.19 76 0
2865562 리눅스에서 dosemu, qemu, dosbox 속도 비교 발명도둑잡기갤로그로 이동합니다. 06.19 38 0
뉴스 신지 예비신랑 문원, 과거 논란 해명하며 진실 밝혀 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2