【发布时间】:2013-06-21 03:27:12
【问题描述】:
我的 C# 程序根据给定的模式生成随机字符串。这些字符串存储在一个列表中。由于不允许重复,所以我这样做:
List<string> myList = new List<string>();
for (int i = 0; i < total; i++) {
string random_string = GetRandomString(pattern);
if (!myList.Contains(random_string)) myList.Add(random_string);
}
您可以想象,这适用于数百个条目。但是我面临着生成数百万个字符串的情况。并且随着每个添加的字符串检查重复项变得越来越慢。
有没有更快的方法来避免重复?
【问题讨论】:
-
将它们全部添加,然后使用 Distinct() 检查重复项,然后将删除的数字加回会更快吗?
-
@Jonesy:这听起来像是值得对特定数据集进行测试的东西。如果它确实更快,那么人们会权衡性能优化与它添加到代码中的混淆(在这种情况下并不多)。
-
@David 我可能会提出理论上的论点,即
HashSet<T>会更快,因为最初的内存影响较小,之后无需完全迭代。检查每个项目的成本仍然存在,但该数据结构已针对它进行了优化。 -
@Robert 你能为每个文档使用
GUID吗? -
@musefan 进行单个数据库查询来确定数据库中是否已存在项目将花费超过数十万甚至数百万次检查以查看项目是否存在于内存中的哈希集中.使用 DB 来解决这个特定问题很容易导致数千倍的速度下降。
标签: c# list duplicates