본문 바로가기
개발/Unity

Unity) 관리되는 코드 스트리핑(Managed Stripping Level)

by 테샤르 2021. 6. 4.

관리되는 코드 스트리핑(Managed Stripping Level)

 

관리되는 코드 스트리핑은 빌드에서 사용되지 않는 코드를 제거하여 최종 빌드 크기를 대폭 줄이는 작업입니다. IL2CPP 스크립팅 백엔드를 사용하는 경우 관리되는 코드 스트리핑을 수행하면 C++로 전환하여 컴파일할 코드를 줄일 수 있어 빌드 시간을 단축할 수도 있습니다. 관리되는 코드 스트리핑을 수행하면 프로젝트의 C# 스크립트에서 빌드된 어셈블리, 패키지와 플러그인의 일부인 어셈블리 및. NET 프레임워크의 어셈블리를 포함한 관리되는 어셈블리에서 코드를 제거할 수 있습니다.

관리되는 스트리핑 레벨

프로젝트의 Player Settings 에 있는 Managed Stripping Level 옵션을 사용하여 Unity가 사용되지 않는 코드를 얼마나 적극적으로 프루닝할지 제어하십시오.

Disabled 코드가 제거되지 않습니다.

Mono 스크립팅 백엔드의 기본 스트리핑 레벨입니다. IL2CPP 스크립팅 백엔드를 선택한 경우 빌드 시간에 미치는 영향 때문에 Disabled 옵션을 사용할 수 없습니다. 관리되는 코드가 많아질수록 IL2CPP가 생성해야 할 C++ 코드도 늘어나므로 더 많은 C++ 코드를 컴파일해야 합니다. 그 결과, 코드를 변경한 후 변경 내용이 실행될 때까지 소요되는 시간이 대폭 증가합니다.
Low 도달할 수 없는 코드를 대부분 제거하는 동시에 실제로 사용되는 코드를 스트리핑할 가능성은 최소화하는 보수적인 규칙에 따라 코드를 제거합니다. 낮은 스트리핑 레벨에서는 크기 축소보다 가용성이 우선합니다.

IL2CPP의 기본 스트리핑 레벨이며, 다수의 Unity 에디터 릴리스에서 사용되었습니다.
Medium 낮은 스트리핑 레벨과 높은 스트리핑 레벨 간의 균형을 추구하는 규칙에 따라 코드를 제거합니다. 중간 스트리핑 레벨은 낮은 스트리핑 레벨보다 덜 보수적이지만 높은 스트리핑 레벨보다 덜 적극적입니다. 따라서 코드 제거로 인한 부작용이 발생할 가능성도 낮은 스트리핑 레벨과 높은 스트리핑 레벨의 중간 수준입니다.

코드 변경과 테스트 사이의 반복 시간을 좀더 단축하려면 IL2CPP 스크립팅 백엔드에 중간 스트리핑 레벨을 적용하십시오.

.NET 3.5 스크립팅 런타임 버전을 설정한 경우 중간 스트리핑 레벨을 사용할 수 없습니다.
High 도달할 수 없는 코드를 최대한 제거하고 중간 스트리핑 레벨보다 작은 빌드를 생성합니다. 높은 스트리핑 레벨에서는 크기 축소가 가용성보다 우선합니다. link.xml 파일과 Preserve 속성을 추가하거나 문제가 되는 코드 섹션을 재작성해야 할 수 있습니다.

높은 스트리핑 레벨에서는 이와 같은 추가 크기 축소를 위해 분석에 더 많은 시간이 소요되므로, 빌드 시간과 반복 시간이 중간 스트리핑 레벨보다 길 수 있습니다.

.NET 3.5 스크립팅 런타임 버전을 설정한 경우 높은 스트리핑 레벨을 사용할 수 없습니다.
반응형

코드 스트리핑 설정으로 인해서 특정 파일이 스트리핑 되어서 사라지는 경우를 방지하기 위해서는 [Preserve] 속성을 추가하면 된다.

[assembly: UnityEngine.Scripting.Preserve]

public class Test{

}

class Foo
{
    [UnityEngine.Scripting.Preserve]
    public void UsingUnityPreserve(){}

    [CustomPreserve]
    public void UsingCustomPreserve(){}

    [Preserve]
    public void UsingOwnPreserve(){}
}

class CustomPreserveAttribute : UnityEngine.Scripting.PreserveAttribute {}

class PreserveAttribute : System.Attribute {}
  • Type: 타입과 해당 기본 생성자를 보존합니다.
  • Method: 선언 타입, 반환 타입, 메서드의 모든 인수 타입을 보존합니다.
  • Property: 프로퍼티, 프로퍼티의 선언 타입, 값 타입, 게터 메서드와 세터 메서드를 보존합니다.
  • Field: 필드, 선언 타입과 필드 타입을 보존합니다.
  • Event: 이벤트, 이벤트의 선언 타입, 반환 타입, 추가 메서드와 제거 메서드를 보존합니다.
  • Delegate: 델리게이트 타입과 모든 델리게이트 메서드를 보존합니다
반응형

 

Unity에서 빌드하는 과정에서 빌드 결과물을 만들어내는 과정에서 자동으로 불필요한 코드를 제거하는 옵션으로 관리에 대한 여부를 처리하는 옵션으로 빌드의 용량을 줄이기 위한 방법으로 알아두면 유용하다.

 

※해당 옵션이 높음에 따라 참조가 되지 않은 옵션들이 제거될수도 있다.

제거가되지 않도록하려면 PreserveAttribute 설정을 해주면 된다.

 

Unity 관리되는 코드 스트리핑 : [ 링크 ]

 

관리되는 코드 스트리핑 - Unity 매뉴얼

관리되는 코드 스트리핑은 빌드에서 사용되지 않는 코드를 제거하여 최종 빌드 크기를 대폭 줄이는 작업입니다. IL2CPP 스크립팅 백엔드를 사용하는 경우 관리되는 코드 스트리핑을 수행하면 C++

docs.unity3d.com

 

★★☆☆☆

 

반응형

댓글