【发布时间】:2023-04-09 05:01:02
【问题描述】:
我正在查看一些遗留代码。该类使用 ArrayList 来保存项目。这些项目是从数据库表中获取的,最多可达 600 万个。该类公开了一个名为“ListCount”的方法来获取 Arraylist 中项目的计数。
Class Settings
{
ArrayList settingsList ;
public Settings()
{
settingsList = GetSettings();//Get the settings from the DB. Can also return null
}
public int ListCount
{
get
{
if (settingsList == null )
return 0;
else
return settingsList.Count;
}
}
}
ListCount 用于检查列表中是否有项目。我想向班级介绍 'Any' 方法。
public bool Any(Func<vpSettings, bool> predicate)
{
return settingsList !=null && settingsList.Cast<vpSettings>().Any(predicate);
}
问题是框架是否进行了某种优化并维护项目的计数,或者它是否遍历 Arraylist 以获取计数?是否建议添加上面的“任何”方法。
Marc Gravel 在以下问题中建议将 Any 用于 IEnumerable
【问题讨论】:
-
你能显示
GetSettings吗?例如,IList和IDictionary派生自ICollection。这是额外的灵活性层的好处之一。Array应该有更少的开销并且更快。 -
@Greg..GetSettings() 做了很多事情并调用其他类中的方法最终从数据库中读取。老实说,该方法的代码到处都是。