【发布时间】:2021-05-21 15:33:31
【问题描述】:
List.Sort 使用的方法最终使用 Array.Sort 生成 2 个字节的垃圾,即使您传入 IComparer 的实例也是如此。我需要在 Unity3d 中的每一帧对许多列表进行排序,所以我需要一种算法,如果可能的话,它不会创建单个字节的垃圾。临时变量的堆栈分配应该没问题。
if (comparer == null)
comparer = (IComparer<T>)Comparer<T>.Default;
if (BinaryCompatibility.TargetsAtLeast_Desktop_V4_5)
ArraySortHelper<T>.IntrospectiveSort(keys, index, length, comparer);
else
ArraySortHelper<T>.DepthLimitedQuickSort(keys, index, length + index - 1, comparer, 32);
【问题讨论】:
-
你确定
Array.Sort分配?你能确定分配了什么吗? -
我可能不是垃圾。对于错误检查,网络库向对象添加类型。
-
如果你能解释为什么你在更新函数中对许多列表进行排序会更好。也许,这里的人可以建议你一个更好的方法来做到这一点。
-
至少,根据 Unity 分析器,它说它在调用 sort 时分配 2 个字节。排序是我的 VR 框架的要求,这是不可避免的。
-
呃,你不能在 .NET 中分配一个 2 字节的对象——最小的对象大小是 12 字节。因此,无论您看到什么都不是对象分配。我怀疑您误解了探查器告诉您的内容,无论是什么
标签: c# algorithm sorting unity3d