Мне нужно сгенерировать примерно 500 000 уникальных кодов для каждого из наших клиентов.
Код запускается через несколько минут, однако мне нужно убедиться, что нет столкновений, поэтому я добавил эту логику, чтобы использовать HashTable.
Это привело к тому, что производительность заняла более 8 часов, генерируя всего 200 тыс.
Есть ли что-нибудь, что я могу использовать для улучшения производительности?
Узким местом производительности является поиск HashSet (около строки 8). Какие есть еще варианты для увеличения производительности, чтобы убедиться, что нет дубликатов?
public string GenerateUniqueReferralCode(CustomerObj customer, HashSet<string> assignedCodes)
{
bool isUnique = false;
string code = String.Empty;
do
{
code = GenerateReferralCode(customer);
if (!assignedCodes.Contains(code))
{
isUnique = true;
}
else
{
isUnique = false;
}
} while (!isUnique);
return code;
}
public string GenerateReferralCode(CustomerObj customer)
{
var code = String.Empty;
//replace special characters and only keep alpha
var name = customer.Profile.FirstName + customer.Profile.LastName;
name = new String(name.Where(Char.IsLetter).ToArray());
if (name.Length > 3)
{
code += name.Substring(0, 4).ToUpperInvariant();
}
else
{
code += customer.Profile.FirstName.Substring(0, customer.Profile.FirstName.Length).ToUpperInvariant();
}
code += CreateMD5(customer.Profile.Email + DateTime.UtcNow.ToString());
code = code.Substring(0, 7);
return code;
}