콘텐츠로 이동

"A Native Collection has not been disposed" 경고와 UploadHandler

A Native Collection has not been disposed, resulting in a memory leak. 경고는 UnityWebRequest.Post처럼 업로드 핸들러를 이미 만들어 주는 생성 함수로 요청을 만든 뒤, uploadHandler에 새 핸들러를 다시 new해 넣을 때 난다. UploadHandlerRaw는 생성할 때 데이터를 네이티브 메모리(NativeArray)로 복사하는데, 교체된 기존 핸들러는 아무도 Dispose하지 않아 그 메모리가 해제되지 않는다. 요청의 disposeUploadHandlerOnDispose는 기본값이 true지만, 요청을 정리할 때 그 시점에 붙어 있는 핸들러만 해제한다.

직접 만든 핸들러를 붙여야 한다면 new UnityWebRequest(url, "POST")로 요청을 만들고 핸들러를 한 번만 붙인다. 기존 핸들러를 불가피하게 교체해야 한다면, 그 전에 기존 핸들러의 Dispose를 호출한다. 요청 자체도 using 블록이나 Dispose로 정리해야 경고가 나지 않는다.