Unity 6.3
0 онлайн 69 гостей 3 в системе
Вход

UnsafeUtility.ReleaseGCObject

Declaration

public static void ReleaseGCObject(ulong gcHandle);

Параметры

Параметр Описание
gcHandle Обработчик, связанный с прикрепленным объектом.

Описание

Отпускает ручку GC, полученную из UnsafeUtility.PinGCObjectAndGetAddress или UnsafeUtility.PinGCArrayAndGetDataAddress.

Метод ReleaseGCObject разблокирует объект, позволяя сборщику мусора свободно управлять его памятью. Используйте этот метод для предотвращения утечки ресурсов. Убедитесь, что вы освобождаете каждый handler после завершения прямых операций в памяти.

using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;

public class ReleaseGCObjectExample : MonoBehaviour { private struct MyStruct { public int value; }

void Start() { // Box a struct object boxedStruct = new MyStruct { value = 10 };

// Pin the object and get a GC handle unsafe { void* dataPtr = UnsafeUtility.PinGCObjectAndGetAddress(boxedStruct, out ulong gcHandle);

// Access and modify data int objectHeaderSize = UnsafeUtility.SizeOf<long>() * 2; int* valuePtr = (int*)((byte*)dataPtr + objectHeaderSize); *valuePtr = 20;

// Release the GC handle UnsafeUtility.ReleaseGCObject(gcHandle); }

// Verify modification MyStruct modifiedStruct = (MyStruct)boxedStruct; Debug.Log($"Modified value: {modifiedStruct.value}"); // Outputs: 20

// Confirm handle release Debug.Log("GC handle released."); } }

Дополнительные ресурсы: ,UnsafeUtility.PinGCObjectAndGetAddress,, ,UnsafeUtility.PinGCArrayAndGetDataAddress,.