替代 for 循环以获得更好的方法

问题描述 投票:0回答:1

我需要创建n次相同的记录。我从用户那里获取计数值,我需要为该次数创建相同的记录。

所以我按照下面的代码使用 For 循环来做到这一点,所以这是正确的方法或任何其他更好的方法来执行此操作以获得更好的性能结果。

for(int i =0; i < Jemclass.Count; i++) // here count is coming from user side.
{
    tools.Add(new Tools() // tools is list in which I am adding records
    {
        Name = Jemclass.Name,
        Brand = Jemclass.Brand,
    });
}
c# asp.net-mvc performance asp.net-core asp.net-mvc-4
1个回答
0
投票

在大多数情况下,

for
循环的性能与您所要求的差不多。它的意图也非常明确:重复循环,直到满足条件。这不是唯一的方式,但它是最不复杂的,而且可能是最容易优化的。

一种替代方法是使用 LINQ。它的优点是简短:

tools.AddRange(Enumerable.Range(0, Jemclass.Count).Select(_ => new Tools { Name = Jemclass.Name, Brand = Jemclass.Brand }));

但是它的性能更好吗?几乎可以肯定不是。有一堆额外的方法调用(是的,可以内联),必须实例化的闭包类型等等。这里涉及迭代器和所有事情。综合考虑,性能并不糟糕,但它与您使用的原始

for
循环不匹配。


一种可能的速度改进是将

AddRange
与一系列项目一起使用。这会在列表中分配空间,然后使用优化的
Array.Copy
来获取项目。

Tool[] newTools = new Tool[Jemclass.Count];
for (int i = 0; i < Jemclass.Count; i++)
{
    newTools[i] = new { Name = Jemclass.Name, Brand = Jemclass.Brand };
}
tools.AddRange(newTools);

根据您添加的项目数量,这可能会稍微快一些。

© www.soinside.com 2019 - 2024. All rights reserved.