在下面的情况下,linq技术会有多低的效率,并且可以被优化?
Linq技术
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;
}发布于 2011-04-24 14:21:19
如果那是,他们都会很快。如果您想加快速度,请考虑使用Dictionary<int,string>并使用TryGetValue(...)。显然,您需要预生成字典,也许可以通过ToDictionary()。
注意,当没有匹配时,所显示的两个示例是不同的;一个抛出;一个返回空字符串。此外,不需要对字符串调用ToString()。
更快的版本(注释);您需要一个字段,
Dictionary<int,string> lookup;在使用之前(或数据更改后)的某个时候,您需要填充它:
lookup = providers.Where(p => p.RealName != null)
.ToDictionary(p => p.RealName.Value,
p => p.ProviderName);那么你的查找就会像:
string providerName;
if(realName == null ||
!lookup.TryGetValue(realName.Value, out providerName))
return null;
return providerName;发布于 2011-04-24 14:25:03
你有代码,如果你想知道它有多高效,就测量它。
当然,人们通常会担心代码的效率,而不是这样的。可读性不是更重要吗?这就是让你慢下来的代码吗?
话虽如此,firs代码可以稍微快一些,如下所示:
public String FindProviderName(Int32? TrueName)
{
String providerName = this.Providers
.First(p => p.TrueName == TrueName)
.Select p.ProviderName);
return providerName;
}通过使用for而不是foreach (如果您的集合类型是List<T>或数组),第二种方法可能会更快。
不过,这两种优化都不会产生任何可衡量的效果。
https://stackoverflow.com/questions/5770972
复制相似问题