哪一个更快/更好?
这个:
List<User> list = new List<User>();
User u;
foreach (string s in l)
{
u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
或者这一个:
List<User> list = new List<User>();
foreach (string s in l)
{
User u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
我的新手开发技巧告诉我第一个更好,但是我的一个朋友告诉我错误,但不能给我一个很好的理由为什么第二个更好.
性能有什么不同吗?
dtb*_*dtb 102
在性能方面,两个示例都编译为相同的IL,因此没有区别.
第二个更好,因为如果u仅在循环内使用它会更清楚地表达你的意图.
Tor*_*dek 14
在任何情况下,最好的方法是使用一个带有Name ...的构造函数,否则,使用大括号表示法:
foreach (string s in l)
{
list.Add(new User(s));
}
Run Code Online (Sandbox Code Playgroud)
要么
foreach (string s in l)
{
list.Add(new User() { Name = s });
}
Run Code Online (Sandbox Code Playgroud)
甚至更好,LINQ:
var list = l.Select( s => new User { Name = s});
Run Code Online (Sandbox Code Playgroud)
现在,虽然你的第一个例子可能在某些情况下不可察觉地更快,但第二个例子更好,因为它更具可读性,并且编译器可能会丢弃变量(并完全省略它),因为它不会超出foreach范围.
声明不会导致任何代码被执行,因此它不是性能问题.
第二个是你的意思,如果你是第二种方式,你不太可能犯一个愚蠢的错误,所以使用它.始终尝试在必要的最小范围内声明变量.
此外,更好的方法是使用Linq:
List<User> users = l.Select(name => new User{ Name = name }).ToList();
Run Code Online (Sandbox Code Playgroud)
每当你对性能有疑问时,唯一要做的就是测量 - 围绕测试运行一个循环并计时.
要回答你的问题 - 不测量:-)或者查看生成的ilasm - 任何差异在有意义的迭代次数中都不会引人注意,并且代码中最昂贵的操作可能会有少量订单的用户分配大小,所以专注于代码清晰度(通常你应该)和2.
哦,它已经很晚了,我想我只是想说不要担心这类事情或者像这样陷入细节.
ķ
| 归档时间: |
|
| 查看次数: |
35977 次 |
| 最近记录: |