比对对象:
for循环剔除不合适元素然后add
List.AddRange(FindAll)
for + add 无GC,但是cpu消耗更高
AddRange cpu消耗略低,但是GC上天
测试结果
测试代码
public class TestCode
{
private List<TestClass> mList;
public void Init()
{
this.mList = new List<TestClass>();
for (int i = 0; i < 1000000; i++)
{
this.mList.Add(new TestClass()
{
AAA = i,
});
}
}
private List<TestClass> mTest1 = new List<TestClass>();
private List<TestClass> mTest2 = new List<TestClass>();
public void Test1()
{
this.mTest1.Clear();
this.mTest2.Clear();
Profiler.BeginSample("Test/FindAll");
this.mTest1.AddRange(this.mList.FindAll(x => x.AAA % 2 == 0));
Profiler.EndSample();
Profiler.BeginSample("Test/For");
for (int i = 0; i < this.mList.Count; i++)
{
var r = this.mList[i];
if (r.AAA % 2 != 0)
{
continue;
}
this.mTest2.Add(r);
}
Profiler.EndSample();
}
public class TestClass
{
public int AAA;
}
}