我想完全删除foreach。
这是我的代码
foreach (var user in elite.Users)
{
if (user.UserName==txtuser.Text && user.UserPWD==txtpass.Text)
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
Hide();
Close();
}
}
答案 0 :(得分:1)
在后台,Linq或Language Integrated Query(几乎)与执行foreach相同。
LINQ并不快,并且可以说比foreach慢。它使用很多,因为它可以简化和缩短代码。
如果您想提高迭代的性能,请考虑在可能的情况下添加break
或continue
语句。
您还可以使用TLP(Task Parallel Library)或PLINQ(Parallel LINQ)(它们使用多线程)来加快迭代速度。
在某些情况下(甚至我要说大多数),使用多线程比执行同步迭代要慢。这还会使您的代码更加复杂,并且如果不理解,通常是应用程序中许多错误的来源。
答案 1 :(得分:0)
Linq不一定更快:这是一个神话。
Linq使用很多方法调用,这需要花费大量的cpu周期...
当然,Linq经过了优化,可以在几次调用中发出证明,有时甚至比内部人员编写的代码还要快。
但是,根据所处理对象的类型,Linq需要大量资源,有时会变慢。
与Linq一起问的问题首先是代码的质量,简洁性,健壮性和可维护性,这是一个奇迹。
对于您的代码,您不需要Linq,并且运行速度不会更快。
您可以在if
范围的末尾添加一个分隔符,以便在找到用户后停止解析:
foreach (var user in elite.Users)
if ( user.UserName == txtuser.Text && user.UserPWD == txtpass.Text )
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
Hide();
Close();
break;
}
使用Linq,您可以编写:
if ( elite.Users.Any(user => user.UserName == txtuser.Text
&& user.UserPWD == txtpass.Text) )
{
MainForm mainForm = new MainForm();
mainForm.ShowDialog();
Hide();
Close();
}
如您所见,您在代码本身上没有收获,并且在这样简单的事情上,它不会更快或更慢地执行。
因为,Linq是什么?它以某种方式做了一个foreach ...
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,8087366974af11d2