浏览代码

[csharp] Resize better if T is a class.

pharan 8 年之前
父节点
当前提交
f2bac04e43
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      spine-csharp/src/ExposedList.cs

+ 12 - 1
spine-csharp/src/ExposedList.cs

@@ -90,7 +90,18 @@ namespace Spine {
 		}
 		}
 
 
 		public ExposedList<T> Resize (int newSize) {
 		public ExposedList<T> Resize (int newSize) {
-			if (newSize > Items.Length) Array.Resize(ref Items, newSize);
+			int itemsLength = Items.Length;
+			var oldItems = Items;
+			if (newSize > itemsLength) {
+				Array.Resize(ref Items, newSize);
+//				var newItems = new T[newSize];
+//				Array.Copy(oldItems, newItems, Count);
+//				Items = newItems;
+			} else if (newSize > itemsLength) {
+				// Allow nulling of T reference type to allow GC.
+				for (int i = Count; i < itemsLength; i++)
+					oldItems[i] = default(T);
+			}
 			Count = newSize;
 			Count = newSize;
 			return this;
 			return this;
 		}
 		}