Usando clock ticks como semente numérica aleatória
Estou usando os pulsos de clock atuais como uma semente para geração de números aleatórios. O número aleatório é usado em um pseudo GUID e um check no meu banco de dados irá garantir que ele ainda não exista antes de retornar. Em média, esse método será chamado em torno de 10k vezes em sucessão durante a vida do processo.
Minha preocupação é que um número idêntico possa ser gerado de volta para trás, resultando em várias chamadas recursivas desnecessárias ao meu banco de dados, verificando a mesma ID. Eu gostaria de evitar isso, se possível. Qual é a melhor maneira de testar este cenário?
Se for importante, o aplicativo é .NET 4 e o banco de dados é o SQL Server 2008.
private static string GenerateUniqueDelId()
{
// Generate a random integer using the current number of clock ticks as seed.
// Then prefix number with "DEL" and date, finally padding random integer with leading zeros for a fixed 25-character total length.
int seed = (int)DateTime.Now.Ticks;
Random number = new Random(seed);
string id = string.Format("DEL{0}{1}", DateTime.Today.ToString("yyyyMMdd"), number.Next().ToString("D14"));
// Lookup record with generated ID in Sesame. If one exists, call method recursively.
string query = "SELECT * FROM Lead WHERE Esm_Id = @Esm_Id";
SqlParameter[] parameters = { new SqlParameter("@Esm_Id", id) };
if (DataManager.GetRow(query, parameters, DelConnection.Sesame) != null) return GenerateUniqueDelId();
// Otherwise, return ID.
return id;
} //// End GenerateUniqueDelId()