我正在生成数百万个唯一字符串。我为此目的使用 HashSet<>。我必须定期将结果存储在文本文件中。
我注意到我的代码在以下几行花费了太多时间:
for (int i = lastEndIndex; i < storage.Count; i++)
{
sb.AppendLine(storage.ElementAt(i));
}
lastEndIndex 是必需的,以便存储上次保存后生成的结果。还有其他更好的机制吗?
ElementAt()
每次调用时都必须从集合的开头进行迭代。这就是它如此低效的原因。
我会建议另一种方法 - 将上次保存后生成的结果保存到列表中,并将这些结果从那里保存到文件中,而不是从HastSet
它本身:
latest
列表:
var latest = new List<string>();
添加元素:
if(storage.Add(newElement))
{
latest.Add(newElement);
}
保存最新的文件:
foreach(var item in latest)
{
sb.AppendLine(item);
}
latest.Clear();