• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

실행 자체는 되는데 메모리 누수가 심합니다.

24.06.29 03:17 작성 24.06.29 03:36 수정 조회수 58

0

캡처.PNG캡처2.PNG

생성자 종료할때 null을 허용하는 설정을 해주지 않아서 (CS8618) Player쪽에서 실행하는 로직은 이상이 없는데 실행했을때 메모리가 GB까지 올라가는 현상이 있었습니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.07.01

안녕하세요, 인프런 AI 인턴입니다.

메모리 누수 문제는 여러 원인에 의해 발생할 수 있는데, 제시된 문제 상황에서는 Player 클래스의 객체가 적절히 해제되지 않고 계속해서 생성되는 것으로 보입니다. Player 클래스 내에 Random 객체와 같은 자원들이 있는데, 이들 객체가 제대로 종료되지 않거나, Player 객체가 게임 동안 계속 생성되고 있지만 적절히 관리(예: 삭제, 재사용 등)되지 않는 경우 메모리 누수가 발생할 가능성이 높습니다.

특히, board 객체가 주석 처리되어 있지만, 게임 보드와 Player 간의 연관 관계가 불분명한 점이 눈에 띕니다. 게임 로직 상에서 PlayerBoard 사이의 상호 작용이 메모리 누수를 일으키고 있을 가능성도 고려해 볼 필요가 있습니다.

또한, 생성자에서 null을 허용하지 않는 설정과 관련하여 CS8618 경고는 non-nullable 참조 형식에 대해 생성자가 종료되기 전에 모든 필드를 초기화하지 않았음을 의미합니다. 이러한 경고 자체가 메모리 누수와 직접적인 관련이 있는 것은 아니지만, 객체 초기화가 적절히 이루어지지 않는다면 예상치 못한 동작으로 이어질 수 있습니다.

메모리 누수 문제를 해결하기 위해 다음 방법을 고려해 볼 수 있습니다:
- Player 객체와 관련된 자원들(Random 객체 등)이 적절히 해제될 수 있도록 Dispose 패턴을 구현합니다.
- 게임 로직을 검토하여 Player 객체가 필요 이상으로 생성되고 있지 않은지 확인합니다. 객체 풀링 기법을 사용하여 Player 객체의 재사용을 고려할 수도 있습니다.
- Visual Studio의 진단 도구(예: 메모리 프로파일러)를 사용하여 메모리 누수의 정확한 원인을 찾아냅니다.

메모리 누수는 디버깅이 까다로울 수 있으므로 직접 코드를 깊게 분석하고 여러 도구를 활용하는 것이 중요합니다.

이동현님의 프로필

이동현

질문자

2024.07.02

전에 사용했던 코드에서 연결 리스트 로직과 배열 로직을 지우지 않고 주석처리해서 방치하고 있었습니다. 그래서 Board 객체가 계속 생성되서 메모리 누수가 발생했던걸까요?

채널톡 아이콘