Unity에서 Editor.CreateEditor(m_TargetObject)를 사용하면, 새로운 Editor 인스턴스가 생성됩니다.
저는 이 방식을 이용해서 EditorPreview를 생성하였습니다. 커스텀 에디터 만들 때 사용하였는데 문제는
이 Editor 인스턴스는 가비지 컬렉션에 자동으로 제거되지 않습니다.
즉, 명시적으로 해제하지 않으면 메모리에 계속 남게 됩니다.
즉 CreateEditor로 계속해서 에디터를 생성하게 된다면 메모리에 계속 남아서 부하가 걸린다는 것 입니다.
그렇기 때문에
Unity에서 안전하게 처리하려면 다음처럼 했습니다.
Editor editor = Editor.CreateEditor(m_TargetObject);
// ... editor 사용 ...
// 더 이상 필요 없으면
DestroyImmediate(editor); // 메모리 해제
결국 개발을 하면서 Disable 하는 경우도 에디터랑 코드랑 중복되는 Destroy가 있어서
Texture2D m_PreviewTexture = AssetPreview.GetAssetPreview(m_TargetObject);
GUI.DrawTexture(previewRect, m_PreviewTexture, ScaleMode.ScaleToFit);
해당 방식으로 Preview를 얻어오도록 변경하였습니다.
Editor 객체는 MonoBehaviour나 ScriptableObject처럼 자동 해제되지 않습니다.
DestroyImmediate(editor)로 반드시 해제해야 메모리 누수를 방지할 수 있습니다.
반복적으로 CreateEditor를 호출하면 메모리 누수가 발생할 수 있으므로, GetAssetPreview 같은 방법으로 에디터를 생성하지 않고 텍스처만 가져오는 방식이 안전합니다.