디시인사이드 갤러리

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

갤러리 본문 영역

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

프갤러(14.52) 2025.06.17 10:54:15
조회 124 추천 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 - -
2865654 드디어 사망한 일본인 발명도둑잡기갤로그로 이동합니다. 06.20 55 0
2865653 한식의 세계화가 진짜 사기인 이유 발명도둑잡기갤로그로 이동합니다. 06.20 47 0
2865652 로스차일드 가문 유대인 가문을 이길자 없는것 같다. 없어져도 돌아간다.세 [2] 넥도리아(222.117) 06.20 77 0
2865651 유튜브 팩트폭행 채널 발명도둑잡기갤로그로 이동합니다. 06.20 43 0
2865650 미국 복지 붕괴의 결과 샤이아 라보프 가정 교육 발명도둑잡기갤로그로 이동합니다. 06.20 57 0
2865644 윤석열은 백신 통제 강화한 사람임 야옹아저씨갤로그로 이동합니다. 06.20 53 0
2865643 Korg사 B2+ 악기 발표 보니 생각나는 예전 글 발명도둑잡기갤로그로 이동합니다. 06.20 39 0
2865642 윤형빈, 은퇴 앞두고 앞니 날아갔다…박준형 "넌 무는 다 갈았다" 발명도둑잡기갤로그로 이동합니다. 06.20 45 0
2865641 우리들은 비비탄 쏴서 치킨, 햄버거, 삼겹살도 만들고 있다 발명도둑잡기갤로그로 이동합니다. 06.20 40 0
2865640 오늘의 소설, 영화 실마리: 후라이팬이나 밥주걱으로 악당 응징하는 아줌마 발명도둑잡기갤로그로 이동합니다. 06.20 46 0
2865638 오늘의 소설, 영화 실마리: 국내외 위인, 성인이 한국 청년으로 환생 발명도둑잡기갤로그로 이동합니다. 06.20 52 0
2865637 오늘의 소설, 영화 실마리: 성인, 위인, 독립운동가, 왕 시간여행 출마 발명도둑잡기갤로그로 이동합니다. 06.20 51 0
2865635 프갤러들은 [2] 발명도둑잡기갤로그로 이동합니다. 06.20 60 0
2865634 ‘청춘로코’에 무속이 들어왔다…추영우·조이현 ‘견우와 선녀’ 발명도둑잡기갤로그로 이동합니다. 06.20 53 0
2865633 외주시간 맞추려다 보니까 ㅆㅇㅆ(124.216) 06.20 58 0
2865631 프갤러들 연봉 오천 넘는다면서 주식투자 500만원 정도밖에 안하네 [2] 발명도둑잡기갤로그로 이동합니다. 06.20 86 0
2865630 회사 선배가 이 회사에 월급루팡이 많다고 욕했는데 박민준갤로그로 이동합니다. 06.20 77 0
2865629 진보 예술가 발명도둑잡기갤로그로 이동합니다. 06.20 80 0
2865628 형 갖고있는 포폴 봐라 [8] hrin(220.120) 06.20 100 0
2865627 구약에는 십일조가 있는데 신약에선 십일조를 나쁘게 봐서 구약을 못 버림 [2] 발명도둑잡기갤로그로 이동합니다. 06.20 51 0
2865626 "처음도 아니고 마지막도 아닌데 뭘"…트럼프 조롱에 마크롱 쿨한 반응 발명도둑잡기갤로그로 이동합니다. 06.20 68 0
2865622 이스라엘 핵보유 발명도둑잡기갤로그로 이동합니다. 06.20 41 0
2865621 홍진영-사람의 배터리 발명도둑잡기갤로그로 이동합니다. 06.20 76 0
2865620 403 권력이 부족합니다 [2] 헬마스터갤로그로 이동합니다. 06.20 74 0
2865619 건강에 500억 쓴 남자의 수면 루틴 발명도둑잡기갤로그로 이동합니다. 06.20 63 0
2865617 최근 광화문 성조태극기 파쇼 집회에 이스라엘기까지 든 사람 발명도둑잡기갤로그로 이동합니다. 06.20 61 0
2865616 4~50대를 극도로 혐오하는 이유 발명도둑잡기갤로그로 이동합니다. 06.20 60 0
2865615 중국 기술 블로그보는데 Moonbit라는 중국 최초 상업용 언어가 화제네 ㅆㅇㅆ(124.216) 06.20 75 0
2865614 해병대 개 학대 사건 보니 생각나는 예전 글 발명도둑잡기갤로그로 이동합니다. 06.19 74 0
2865613 재능이 없어도 [3] 루도그담당(58.239) 06.19 87 0
2865612 형이 어렸을때는 리눅스에서 c++로 개발함 [4] 프갤러(14.5) 06.19 108 0
2865611 그냥 매일 무력하고 벽에 부딪힌 느낌임 [3] ㅆㅇㅆ(124.216) 06.19 104 0
2865610 세상이 너무 밉다. 그냥 나도 더 큰 세계 더 큰 경치를 보고 싶다 [4] ㅆㅇㅆ(124.216) 06.19 87 0
2865609 C++ 로 개발하면 호환성 문제가 있지 않슴니까? [1] ㅇㅇ(223.38) 06.19 84 0
2865608 우리는 국가주도의 사상적 폭력을 너무 당연하게 생각함 [3] ㅆㅇㅆ(124.216) 06.19 71 0
2865607 <84제곱미터> 한대서 생각나는 예전 글 [1] 발명도둑잡기갤로그로 이동합니다. 06.19 32 0
2865606 이재명 덕분에 국비학원 미어 터질 듯 프갤러(112.216) 06.19 124 1
2865605 개발을 C++ 로 해야 하는 이유. [2] 프갤러(59.16) 06.19 107 0
2865604 정처기의 가장 큰 문제점은 사고의 프레임워크가 오염됨 [2] ㅆㅇㅆ(124.216) 06.19 108 1
2865603 미국이 망해도 재즈와 락과 힙합은 남을 거야 발명도둑잡기갤로그로 이동합니다. 06.19 49 0
2865602 취미가 직업이 되면 좆 같은 이유 [2] ㅇㅇ(223.38) 06.19 78 0
2865601 leekib 깃헙 친구 구해요 [1] 프갤러(211.187) 06.19 51 0
2865600 정처기 그대로 따라가면 그냥 틀딱 레거시 코드싸개 되는거임 [3] ㅆㅇㅆ(124.216) 06.19 94 1
2865599 꾹꾹이 마우스 발명도둑잡기갤로그로 이동합니다. 06.19 41 0
2865598 정처기 문제 자체가 그냥 답이 있는 문제를 낼려고 문제자체가 병신이잖아 ㅆㅇㅆ(124.216) 06.19 59 0
2865597 내 아를 나도 외치며 울었다 발명도둑잡기갤로그로 이동합니다. 06.19 59 0
2865595 사실 맨 먼스 신화에서 나오듯 사람 더 뽑는다고 [2] ㅆㅇㅆ(124.216) 06.19 61 0
2865594 좆소 개발팀 특 (경험담) [2] ㅇㅇ(223.38) 06.19 154 9
2865593 서명참여] 한일기본조약 60년, 한국과 일본의 시민들이 다시쓰는 한일 관 발명도둑잡기갤로그로 이동합니다. 06.19 64 0
2865592 나님도 대학생때 프밍 과목 C학점 맞았었제 류도그담당(58.239) 06.19 57 0
뉴스 ‘살롱 드 홈즈’ 이시영-정영주-남기애-이재균, 변태 잡이 함정수사 大 성공! 사이다 작렬! 디시트렌드 07.02
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2