簡體   English   中英

C# 如何在不產生任何垃圾的情況下對列表進行排序(Unity3d)

[英]C# How Can I Sort A List without Generating Any Garbage at All (Unity3d)

List.Sort 使用的方法最終使用 Array.Sort,即使您傳入 IComparer 的實例,它也會生成 2 個字節的垃圾。 我需要對 Unity3d 中的每一幀的許多列表進行排序,所以我需要一種算法,如果可能的話,它不會創建單個字節的垃圾。 臨時變量的堆棧分配應該沒問題。

Unity Profiler 圖片

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);

在這個 github repo中查看這個庫。 我在這篇文章的底部發現了這一點,它是關於 LINQ 如何影響 GC 以及 LINQ function 可以在每一幀上安全使用的。 這個庫是專門為統一編寫的,正如作者所說,這個庫是

C# 的 IEnumerator 和 LINQ 的無 GC 版本

有一種實現快速排序算法並且不會產生垃圾的排序方法。 老實說,我還沒有完全測試過它,但是我使用它的時候它工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM