Vim*_*987 1 .net c# arrays optimization
我只是看看我们的代码库的历史记录,并找到了一个从这里改变的签到:
public virtual T[] ToArray()
{
List<T> list = new List<T>();
foreach (object item in List)
{
list.Add((T)item);
}
return list.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
对此:
public virtual T[] ToArray()
{
T[] result = new T[List.Count];
for (int i = 0; i < List.Count; ++i)
{
result[i] = (T)List[i];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
评论:优化ToArray实现,以避免在流程中创建多个数据结构.
我想知道为什么这里有一个优化.for()可能比foreach()"创建多个数据结构" 更快,但在哪里?
P/S:写这篇文章的人现在正在度假
在原始代码中,您创建了一个List<T>- 没有指定容量,因此它可能涉及多次复制内部数组 - 然后您调用ToArray它List<T>,从而产生一个副本.
较新版本不会这样做.它创建一个数组,并将原始列表复制到其中.
不可否认,只使用LINQ的ToArray方法会更简单,甚至可能更有效,并且不清楚为什么这是一个虚拟方法,但......