Использование тактов часов в качестве начального числа случайных чисел

Я использую текущие такты часов в качестве начального значения для генерации случайных чисел. Случайное число используется в псевдо-GUID, и проверка в моей базе данных перед возвратом удостоверится, что оно еще не существует. В среднем этот метод будет вызываться около 10 000 раз подряд в течение жизни процесса.

Меня беспокоит то, что один и тот же номер может быть сгенерирован подряд, что приведет к множеству ненужных рекурсивных вызовов моей базы данных, проверяющих один и тот же идентификатор. Я хотел бы избежать этого, если это возможно. Каков наилучший способ проверить этот сценарий?

Если это имеет значение, приложение — .NET 4, а база данных — 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()
5
задан Brian 5 June 2012 в 19:26
поделиться