.net 在以下情况下,linq技术的效率会降低多少,并且可以进行优化?
在以下情况下,linq技术的效率会降低多少,并且可以进行优化 Linq技术:.net 在以下情况下,linq技术的效率会降低多少,并且可以进行优化?,.net,linq,performance,optimization,.net,Linq,Performance,Optimization,在以下情况下,linq技术的效率会降低多少,并且可以进行优化 Linq技术: public String FindProviderName(Int32? TrueName) { String providerName = (from p in this.Providers where p.TrueName == TrueName select p.ProviderName).Fir
public String FindProviderName(Int32? TrueName)
{
String providerName = (from p in this.Providers
where p.TrueName == TrueName
select p.ProviderName).First().ToString();
return providerName;
}
public String FindProviderName(Int32? TrueName)
{
String providerName = String.Empty;
foreach (IProvider provider in this.Providers)
{
if (provider.TrueName == TrueName)
{
providerName = provider.ProviderName;
break;
}
}
return providerName;
}
步行技术:
public String FindProviderName(Int32? TrueName)
{
String providerName = (from p in this.Providers
where p.TrueName == TrueName
select p.ProviderName).First().ToString();
return providerName;
}
public String FindProviderName(Int32? TrueName)
{
String providerName = String.Empty;
foreach (IProvider provider in this.Providers)
{
if (provider.TrueName == TrueName)
{
providerName = provider.ProviderName;
break;
}
}
return providerName;
}
如果这是LINQ到对象,它们都会非常快。如果您想要更快,请考虑<代码>字典<代码>,并使用<代码> TyGETValuy(…)<代码>。显然,您需要预先生成字典,可能是通过ToDictionary()生成的 注意,当没有匹配时,所示的两个示例是不同的;一人投掷;返回一个空字符串。此外,不需要对字符串调用ToString()
更新更快的版本(评论);你需要一个领域
Dictionary<int,string> lookup;
然后,您的查找将如下所示:
string providerName;
if(realName == null ||
!lookup.TryGetValue(realName.Value, out providerName))
return null;
return providerName;
你有代码,如果你想知道它有多高效,只需测量它 当然,人们经常担心代码的效率,而他们本不应该这样做。可读性不是更重要吗?这就是让你慢下来的代码吗 也就是说,firs代码可以像这样稍微快一点:
public String FindProviderName(Int32? TrueName)
{
String providerName = this.Providers
.First(p => p.TrueName == TrueName)
.Select p.ProviderName);
return providerName;
}
如果集合类型是列表
或数组,则使用for
而不是foreach
,可以加快第二个集合
不过,这两种优化很可能不会产生任何可测量的效果。如果
ProviderName
是string
,则不需要对其调用ToString()
。没错,但编译器会知道这一点,并且不必费心在IL@Carnotaurus中运行它,但它只是“返回此项”的callvirt,非常快哦,我以为编译器会足够聪明,不会编译这样一个多余的语句。所以,我会给他一个投票。@Carnotaurus-编译器也希望程序员足够聪明,不会添加多余的语句:)事实上,它消除了一些,而不是所有的愚蠢。是的,这两种技术做的事情并不完全相同-你能给我一个更快实现这两种技术的例子吗?是的,我要求将linq重写为更基本的lamdba将略微提高速度。。。是的,这是IList