Eu tenho as seguintes estruturas:
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;
}
Estou criando assim:
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
};
Minha pergunta é: como descartá-lo adequadamente após o término do trabalho?
Meu _population
interior é NativeBasicPopulation
apenas uma cópia da pop
variável local, portanto preciso ligar Dispose
imediatamente pop
?
O loop interno NativeBasicPopulation::Dispose
realmente funcionará? Porque pelo que entendi, individual
em determinado loop é apenas uma cópia de um elemento dentro do array.
O manual diz:
Em resumo, você pode atribuir uma
NativeContainer
instância a múltiplas variáveis, mas só precisa chamarDispose
uma delas. Portanto, para o seu problema, você não precisa descartarpop
imediatamente, mas deve descartar o objeto que salvou após o término do trabalho.