提问人:Berkay Onur 提问时间:11/3/2023 最后编辑:dbcBerkay Onur 更新时间:11/4/2023 访问量:48
内存泄漏本机数组和 UnSafeList
Memory Leak Native Array and UnSafeList
问:
我正在使用包含不安全列表的 Unity Native 数组。回退分配会消耗太多时间。一定是内存泄漏,但我无法弄清楚。这是我的代码:
NativeArray < SVerticeKnowledge > SVerticeKnowledges = new NativeArray < SVerticeKnowledge > (VerticeKnowledges.Count, Allocator.TempJob);
for (int i = 0; i < SVerticeKnowledges.Length; i++) {
UnsafeList < float3 > PosForNode = new UnsafeList < float3 > (VerticeKnowledges[i].PosForNode.Count, Allocator.TempJob);
UnsafeList < float > Weights = new UnsafeList < float > (VerticeKnowledges[i].Weights.Count, Allocator.TempJob);
UnsafeList < TransformData > transformDatas = new UnsafeList < TransformData > (VerticeKnowledges[i].ConnectedNode.Count, Allocator.TempJob);
for (int j = 0; j < VerticeKnowledges[i].PosForNode.Count; j++) {
PosForNode.AddNoResize(VerticeKnowledges[i].PosForNode[j]);
}
for (int j = 0; j < VerticeKnowledges[i].Weights.Count; j++) {
Weights.AddNoResize(VerticeKnowledges[i].Weights[j]);
}
for (int j = 0; j < VerticeKnowledges[i].ConnectedNode.Count; j++) {
transformDatas.AddNoResize(new TransformData(VerticeKnowledges[i].ConnectedNode[j].position, VerticeKnowledges[i].ConnectedNode[j].rotation, VerticeKnowledges[i].ConnectedNode[j].localScale));
}
SVerticeKnowledges[i] = new SVerticeKnowledge(PosForNode, Weights, transformDatas, new TransformData(transform.position, transform.rotation, transform.localScale));
}
var job = new NewPosCalculation() {
VerticeKnowledges = SVerticeKnowledges
};
JobHandle jobHandle = job.Schedule(SVerticeKnowledges.Length, 1);
jobHandle.Complete();
for (int i = 0; i < VerticeKnowledges.Count; i++) {
MeshVertices[i] = VerticeKnowledges[i].NewPos;
}
foreach(SVerticeKnowledge vertice_knowledge in SVerticeKnowledges) {
vertice_knowledge.ConnectedNodeLocalToWorld.Dispose();
vertice_knowledge.PosForNode.Dispose();
vertice_knowledge.Weights.Dispose();
}
SVerticeKnowledges.Dispose();
我想修复内存泄漏或耗时高的问题。
答: 暂无答案
评论
Allocator.TempJob
Dispose
Dispose
memory profiler
Unity.Collections.NativeArray<T0>
或其他类型?什么是?是Unity.Collections.LowLevel.Unsafe.UnsafeList<T>
吗?什么是?它是托管类型还是非托管类型?您能否编辑您的问题以分享一个最小的可重现示例,显示您的类型并指示您正在使用的库?NativeArray<T>
UnsafeList<T>
SVerticeKnowledge