mpe*_*pen 4 c# compiler-construction optimization
public SharpQuery Add(params HtmlNode[] elements)
{
var nodes = new List<HtmlNode>(_context.Count + elements.Length);
nodes.AddRange(_context);
nodes.AddRange(elements);
return new SharpQuery(nodes, this);
}
public SharpQuery(IEnumerable<HtmlNode> nodes, SharpQuery previous = null)
{
if (nodes == null) throw new ArgumentNullException("nodes");
_previous = previous;
_context = new List<HtmlNode>(nodes);
}
Run Code Online (Sandbox Code Playgroud)
我有一大堆函数创建一个新的List<T>,向它添加一堆节点,然后将它传递给构造函数,该构造函数接受列表,并用它创建另一个新列表.
编译器是否足够聪明,可以确定它不需要两次创建列表?
它不是"足够聪明"的情况 - 编译器按照它所说的去做; 你告诉它创建多个列表:它将创建多个列表.
但是,由于你及时发布它们,它们应该相当干净地收集,希望gen-0.因此,除非你在紧密循环中这样做,否则我不会对此感到太兴奋.
如果你想避免列表,你可以考虑LINQ Concat,它允许你附加序列而不需要任何额外的列表/集合等.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |