我有以下结构:
public struct BasicIndividualStruct
{
public void Dispose()
{
path.Dispose();
}
public float fitness;
public UnsafeList<float2> path;
}
public struct NativeBasicPopulation
{
public void Dispose()
{
foreach(var individual in _population)
{
individual.Dispose();
}
_population.Dispose();
}
public NativeArray<BasicIndividualStruct> _population;
}
我是这样创建的:
var population = new NativeArray<BasicIndividualStruct>(50, Allocator.TempJob);
for (int i = 0; i < populationSize; i++)
{
var element = population[i];
element.path = new Unity.Collections.LowLevel.Unsafe.UnsafeList<Unity.Mathematics.float2>(10, Allocator.TempJob);
element.path.Resize(10);
element.fitness = 0;
population[i] = element;
}
var pop = new NativeBasicPopulation()
{
_population = population
};
我的问题是 - 工作结束后如何正确处置它?
我的_population
内部NativeBasicPopulation
只是局部pop
变量的副本,因此我需要立即Dispose
调用吗?pop
里面的循环NativeBasicPopulation::Dispose
真的有效吗?因为根据我的理解,individual
给定的循环只是数组内元素的副本。
手册说:
总之,您可以将一个
NativeContainer
实例分配给多个变量,但只需要调用Dispose
其中之一。因此,对于您的问题,您不需要pop
立即处置,而是应该在作业结束后处置您保存的对象。