diff --git a/1.4/Assemblies/PerformanceFish.dll b/1.4/Assemblies/PerformanceFish.dll index 7577b4a..ae4dc30 100644 Binary files a/1.4/Assemblies/PerformanceFish.dll and b/1.4/Assemblies/PerformanceFish.dll differ diff --git a/1.4/Assemblies/PerformanceFish.pdb b/1.4/Assemblies/PerformanceFish.pdb index ebdbbe0..03d1be7 100644 Binary files a/1.4/Assemblies/PerformanceFish.pdb and b/1.4/Assemblies/PerformanceFish.pdb differ diff --git a/Source/PerformanceFish/Listers/ThingOwnerOptimization.cs b/Source/PerformanceFish/Listers/ThingOwnerOptimization.cs index f920952..815462a 100644 --- a/Source/PerformanceFish/Listers/ThingOwnerOptimization.cs +++ b/Source/PerformanceFish/Listers/ThingOwnerOptimization.cs @@ -137,7 +137,7 @@ public sealed class ThingOwnerOptimization : ClassWithFishPrepatches : innerList.LastIndexOf((T)item); if (index >= 0) - innerList.RemoveAtFastUnordered(index); + innerList.RemoveAtFastUnorderedUnsafe(index); indexMap.Remove(itemKey); diff --git a/Source/PerformanceFish/PerformanceFish.csproj b/Source/PerformanceFish/PerformanceFish.csproj index e136c69..f564521 100644 --- a/Source/PerformanceFish/PerformanceFish.csproj +++ b/Source/PerformanceFish/PerformanceFish.csproj @@ -17,7 +17,7 @@ enable True v1.4 - 0.3.999.9 + 0.3.999.91 1701;1702;IL2121;CS8500;CS9082;CA1000;CA1002;CA1003;CA1707;CA1010;CA1715;CA1716;CA1724;CA1031;CA1033; CA1034;CA1043;CA1051;CA1305;CA1310;CA1710;CA1711;CA1810;CA1812;CA1819;CA1851;CA2002;CA5394;CA1725;CA1062 diff --git a/Source/PerformanceFish/Utility/CollectionExtensions.cs b/Source/PerformanceFish/Utility/CollectionExtensions.cs index 482ce82..1ae2706 100644 --- a/Source/PerformanceFish/Utility/CollectionExtensions.cs +++ b/Source/PerformanceFish/Utility/CollectionExtensions.cs @@ -5,7 +5,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -using Mono.Collections.Generic; namespace PerformanceFish.Utility; @@ -296,6 +295,17 @@ public static class CollectionExtensions return ThrowForNoElements(); } + + public static unsafe void RemoveAtFastUnorderedUnsafe(this List list, int index) + { + fixed (T* lastBucket = &list._items[list._size - 1]) + { + list[index] = *lastBucket; + *lastBucket = default; + } + + list._size--; + } public static List AsOrToList(this IEnumerable enumerable) => enumerable as List ?? enumerable.ToList();