Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

프로젝트 매니저

Godot 4.6부터 디버거 하단 패널에 새로운 ObjectDB Profiler 탭이 있습니다. 이 프로파일러를 사용하면 현재 메모리에 할당된 모든 Object 파생 클래스를 포함하는 데이터베이스인 ObjectDB의 현재 상태에 대한 스냅샷을 찍을 수 있습니다. 이는 메모리 누수를 식별하고 프로젝트의 메모리 사용량을 이해하는 데 유용합니다.

또한 이 도구는 두 스냅샷 간의 차이점을 시각화할 수 있습니다. 이는 프로젝트를 변경한 후 메모리 사용량의 개선 또는 회귀를 식별하는 데 사용할 수 있습니다. 메모리 사용량을 줄이면 메모리에 병목 현상이 발생하지 않는 경우에도 성능이 향상될 수 있습니다. 메모리 사용량을 줄이면 더 적은 수의 할당을 수행할 수 있으며, 이는 특히 게임 플레이 중에 대량으로 수행되는 경우 비용이 많이 드는 작업이 될 수 있습니다.

더 보기

프로젝트에서 메모리 사용량을 줄이는 데 도움이 될 수 있는 노드에 대한 경량 대안 사용에 대한 자세한 내용은 :ref:`doc_node_alternatives`를 참조하세요.

경고

ObjectDB 프로파일러는 엔진이나 외부 라이브러리에서 사용하는 모든 메모리 비트를 추적하지 않습니다. 스크립팅 API에 노출되지 않은 네이티브 엔진 클래스는 스냅샷에 표시되지 않습니다.

이 정보에 액세스해야 하는 경우 외부 메모리 프로파일링 도구를 사용하는 것이 좋습니다.

사용례

Debugger 하단 패널에서 ObjectDB 프로파일러 탭을 엽니다. 아직 스냅샷이 생성되지 않은 요약 페이지가 표시됩니다.

스냅샷이 생성되지 않은 ObjectDB 프로파일러 요약

스냅샷이 생성되지 않은 ObjectDB 프로파일러 요약

프로젝트를 실행한 다음 스냅샷을 찍고 싶은 지점에 도달합니다(예: 레벨을 로드한 후). :button:`Take ObjectDB Snapshot`을 클릭하면 현재 시점의 스냅샷을 찍을 수 있습니다. 버튼이 회색으로 표시되면 프로젝트가 먼저 실행되고 있는지 확인하세요.

하나의 스냅샷이 생성된 ObjectDB 프로파일러 요약

하나의 스냅샷이 생성된 ObjectDB 프로파일러 요약

프로젝트를 한 번 실행하는 동안 여러 스냅샷을 찍을 수 있습니다. 또한 스냅샷 목록에서 스냅샷을 마우스 오른쪽 버튼으로 클릭하여 이름을 바꾸거나 파일 관리자에 표시하거나 삭제할 수 있습니다.

스냅샷을 찍은 후 이름을 바꾸어 설명적인 이름(예: before_optimization, after_optimization)을 지정하는 것이 좋습니다. 이름에 관계없이 스냅샷을 찍은 날짜는 스냅샷 파일 자체에 계속 저장됩니다.

스냅샷 파일은 확장자가 ``.odb_snapshot``이고 ``user://objectdb_snapshots/``에 있습니다(데이터 경로 세부 정보 참조). 플랫폼 독립적이므로 여러 장치에 걸쳐 안전하게 복사할 수 있습니다.

C#과 GDScript와의 일반적인 차이

최소 2개의 스냅샷을 촬영한 후 Diff Against 드롭다운을 사용할 수 있게 됩니다. 여기에서 다른 스냅샷을 선택하여 현재 선택한 스냅샷과 비교할 수 있습니다.

ObjectDB 프로파일러의 왼쪽 하단 모서리에 있는 Diff Against 드롭다운

ObjectDB 프로파일러의 왼쪽 하단 모서리에 있는 Diff Against 드롭다운

그러면 요약 페이지에 두 스냅샷 간의 차이점이 표시됩니다.

요약 탭에서 비교 중인 두 스냅샷

요약 탭에서 비교 중인 두 스냅샷

이는 ObjectDB 프로파일러의 다른 모든 탭에도 적용되며, 추가 열에 두 스냅샷 간의 차이점이 표시됩니다.

클래스

클래스 탭에서는 스냅샷이 생성된 순간에 생성된 각 클래스의 인스턴스 수를 볼 수 있습니다.

수업 탭에서 하나의 스냅샷을 보고 있습니다.

수업 탭에서 하나의 스냅샷을 보고 있습니다.

diff 모드에서는 현재 선택된 스냅샷(A열)과 비교 중인 스냅샷(B열)에 대한 클래스 인스턴스 수가 표시됩니다. 또한 Delta 열에 인스턴스 수의 차이가 표시됩니다.

클래스 탭에서 두 개의 스냅샷을 비교하고 있습니다. 여기서 A열은 ``second_session``, B열은 ``first_session``입니다.

클래스 탭에서 두 개의 스냅샷을 비교하고 있습니다. 여기서 A열은 second_session, B열은 ``first_session``입니다.

타임라인을 확대/축소하려면 오른쪽 하단에 있는 슬라이더를 클릭하고 드래그할 수 있습니다.

인스펙터에 표시된 선택된 클래스 인스턴스

인스펙터에 표시된 선택된 클래스 인스턴스

인스펙터에서 인스턴스 미리보기는 다른 탭(노드, Objects 및 RefCounted)에서도 사용할 수 있습니다.

오브젝트

개체 탭은 유사하지만 데이터를 표시하는 방식이 다릅니다. 여기에서는 모든 인스턴스가 클래스별로 그룹화되는 대신 선형 방식으로 나열됩니다. 개체를 선택하면 해당 개체가 참조하는 다른 개체 목록(Outbound References)과 해당 개체가 참조하는 개체 목록(Inbound References)이 오른쪽에 표시됩니다.

이를 통해 "하향식" 방식(주어진 개체가 참조하는 개체 보기) 또는 "상향식" 방식(주어진 개체를 참조하는 개체 보기)으로 개체를 볼 수 있습니다.

"하향식" 방식으로 개체를 보는 데 사용되는 개체 탭

"하향식" 방식으로 개체를 보는 데 사용되는 개체 탭

위 이미지의 목록에서 default_font 개체를 클릭하면 보기가 해당 개체의 관점으로 전환됩니다. 이 개체는 다른 많은 개체에서도 참조되므로 효과적으로 "상향식" 관점으로 전환됩니다.

"상향식" 방식으로 개체를 보는 데 사용되는 개체 탭

"상향식" 방식으로 개체를 보는 데 사용되는 개체 탭

노드

다음으로, 노드 탭에는 스냅샷이 생성된 당시의 씬 트리가 표시됩니다.

씬 트리를 보는 데 사용되는 노드 탭

씬 트리를 보는 데 사용되는 노드 탭

이 탭은 두 스냅샷 간의 차이를 보다 시각적으로 표시하는 기능을 지원하므로 diff 보기에서 특히 흥미롭습니다. Combined Diff 선택을 취소하면 차이점을 나란히 볼 수 있습니다.

노드 탭의 별도 차이점 보기

노드 탭의 별도 차이점 보기

:button:`Combined Diff`를 선택하면 차이점이 단일 트리로 병합되어 추가된 노드가 녹색으로 강조 표시되고 제거된 노드가 빨간색으로 강조 표시되는 것을 볼 수 있습니다.

노드 탭의 결합된 차이점 보기

노드 탭의 결합된 차이점 보기

또한 트리 보기 끝에서 고아 노드(씬 트리 루트에 연결되지 않은 노드) 목록을 볼 수 있습니다. 루트 노드는 기본 씬 트리 외부에 나열되므로 이를 축소하면 더 쉽게 볼 수 있습니다.

ObjectDB 프로파일러의 노드 트리 끝에 있는 고아 노드

ObjectDB 프로파일러의 노드 트리 끝에 있는 고아 노드

마지막 탭은 RefCounted 탭입니다. 이 탭은 개체 탭과 유사하지만 RefCounted 파생 클래스의 참조 횟수를 테이블에 직접 표시합니다. 테이블에는 4개의 열이 있습니다.

  • 네이티브 참조: 개체에 대한 네이티브 엔진 참조 수입니다.

  • ObjectDB Refs: 개체에 대한 ObjectDB 참조 수입니다.

  • 총 참조: 기본 참조와 ObjectDB 참조의 합계입니다.

  • ObjectDB 주기: 감지된 순환 참조 수입니다.

차이점 보기에서 RefCounted 인스턴스가 두 스냅샷 모두에 존재하는 경우 스냅샷 B는 항상 스냅샷 A보다 위에 나열됩니다.

오른쪽 목록에는 참조 목록 및 중복 여부를 포함하여 선택한 인스턴스에 대한 세부 정보가 표시됩니다.

RefCounted 인스턴스를 보는 데 사용되는 RefCounted 탭

RefCounted 인스턴스를 보는 데 사용되는 RefCounted 탭

참고

RefCounted 탭은 :ref:`class_object`에서 직접 파생된 개체를 나열하지 않습니다. 이러한 개체는 참조 계산을 사용하지 않기 때문입니다.