본문 바로가기

전생의 기억/Unity

Texture2D Memory Leak 해결(DestroyImmediate, Resources.UnloadUnusedAssets)

Unity에서 Texture의 특정 영역을 Crop하거나, 조작하기 위해서는 Texture 객체를 다른 타입으로 변환해야 하는 경우가 생깁니다.

 

Example : Image crop

 

Crop Process:

Texture -> Texture2D -> Mat (OpenCV Asset) -> Crop(SubMat) -> Texture2D -> Texture

 

Issue:

Texture -> Texture2D 과정에서, 생성한 Texture2D 객체가 자동으로 Unload되지 않아, Garbage Collection이 돌지 않고, 메모리에 계속 누적)

 

Solution:

1. Resources.UnloadUnusedAssets() 함수 호출

즉시 해제

 

2. DestroyImmediate(_texture2d)

1번에 비해, 더빠르다.

 

Source Example:

Mat mat = new Mat(tex2d.width, tex2d.height, CvType.CV_8UC4);

//texture to mat

mat = OpenCVExtension.instance.TextureToMat(tex2d);

//adjust roi
mat = OpenCVExtension.instance.SubMat(mat,m_size,ofs);

//*** Texture2D 죽이기 테스트
DestroyImmediate(tex2d);