Ich verwende die aktuellen Clock-Ticks als Startwert für die Zufallsgenerierung. Die Zufallszahl wird in einer Pseudo-GUID verwendet und eine Überprüfung in meiner Datenbank stellt sicher, dass sie nicht existiert, bevor sie zurückgegeben wird. Im Durchschnitt wird diese Methode während der gesamten Prozessdauer etwa 10k Mal hintereinander aufgerufen.Verwenden von Clock-Ticks als Zufallszahl Seed
Meine Sorge ist, dass eine identische Nummer hintereinander erzeugt werden kann, was zu mehreren unnötigen rekursiven Aufrufen meiner Datenbank führt, die nach derselben ID suchen. Das möchte ich möglichst vermeiden. Was ist der beste Weg, dieses Szenario zu testen?
Wenn es darauf ankommt, ist die Anwendung .NET 4 und Datenbank 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()
Wenn Sie auf SQL Server gehen für ihre spezifische Ausstrahlung -Warum kann nicht zu überprüfen Sie generieren sie dort auf den ersten Platz? – YavgenyP
Können Sie anstelle einer Zufallszahl stattdessen auch die Spalte "Identity" verwenden? – Matthew
Warum nicht einfach eine GUID verwenden? Ich bin kein großer Fan davon, ein Rad neu zu erschaffen. –