Estoy usando las marcas de reloj actuales como una semilla para la generación de números aleatorios. El número aleatorio se usa en un pseudo GUID y una comprobación en mi base de datos se asegurará de que no exista antes de volver. En promedio, este método se llamará alrededor de 10 veces por semana durante la vida del proceso.Uso de marcas de reloj como número aleatorio semilla
Mi preocupación es que un número idéntico podría generarse de forma consecutiva, lo que da como resultado múltiples llamadas repetitivas innecesarias a mi base de datos que buscan el mismo ID. Me gustaría evitar esto si es posible. ¿Cuál es la mejor manera de probar este escenario?
si importa, es la aplicación .NET 4 y la base de datos es 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()
Si vas a SQL Server para comprobar su exitancia -por qué no puede usted los genera allí en el primer lugar? – YavgenyP
Como alternativa al uso de un número aleatorio, ¿puede usar una columna 'Identity' en su lugar? – Matthew
¿Por qué no utilizar un GUID? No soy un gran fan de volver a crear una rueda. –