Sto usando gli attuali tick dell'orologio come seme per la generazione di numeri casuali. Il numero casuale viene utilizzato in uno pseudo GUID e un controllo nel mio database assicurerà che non esista già prima di tornare. In media, questo metodo verrà chiamato circa 10k volte in successione durante la vita del processo.Utilizzare il quadrante dell'orologio come seme casuale numero
La mia preoccupazione è che un numero identico possa essere generato da un back to back con conseguente più chiamate ricorsive non necessarie al mio database che controlla lo stesso ID. Mi piacerebbe evitare questo, se possibile. Qual è il modo migliore per testare questo scenario?
Se è importante, l'applicazione è NET 4 e il database è 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()
Se avete intenzione di SQL Server per verificare la presenza di loro exitance -Perché gergo li generi li al primo posto? – YavgenyP
In alternativa all'utilizzo di un numero casuale, puoi invece utilizzare una colonna 'Identity'? – Matthew
Perché non usare solo un GUID. Non sono un grande fan di ricreare una ruota. –