对于我的项目,我必须生成一个唯一字符串列表。一切正常,但我的问题是它最后很慢。我尝试过使用 Parallel-Loops,但我发现ConcurrentBag<T>
我正在使用的我的 Parallel-Loops 也很慢。现在我正在使用一个简单的 for 循环,List<T>
它现在有点快,但也很慢。
这是我的代码:
private List<string> Generate(int start, int end, bool allowDupes)
{
var list = new List<string>();
var generator = new StringGenerator(LowerCase, UpperCase, Digits, NumberOfCharacters);
for (var i = start; i < end; i++)
{
StringBuilder sb;
while (true)
{
sb = new StringBuilder();
for (var j = 0; j < NumberOfSegments; j++)
{
sb.Append(generator.GenerateRandomString());
if (j < NumberOfSegments - 1)
{
sb.Append(Delimiter);
}
}
if (!allowDupes)
{
if (list.Contains(sb.ToString()))
{
continue;
}
}
break;
}
list.Add(sb.ToString());
GeneratedStringCount = i + 1;
}
return new List<string>(list);
}
我也和我的老师谈过,他会使用相同的算法来生成这些字符串。你知道更好的解决方案吗?(中的GenerateRandomString()
方法StringGenerator
简单,不会消耗太多性能。 list.Contains(xy)
是消耗大量资源。[Visual Studio 中的性能分析])