Ich habe eine C# -Anwendung, die eine sequenzielle GUID für jede Zeile generiert, die ich in eine Tabelle einfügen. Ich erwarte, dass die eingefügten GUIDs sequenziell sind, aber manchmal sie brechen die Sequenz (in Chunks).Generierte sequenzielle GUIDs sind manchmal nicht sequenziell
Beispiel:
Diese GUIDs werden in der Reihenfolge gezeigt, dass sie eingesetzt werden.
Warum werden diese 'sequentiellen' GUIDs mit einem so großen Sequenzbruch erzeugt?
-Code verwendet sequenziellen GUIDs zu generieren:
class NativeMethods
{
[DllImport("rpcrt4.dll", SetLastError = true)]
public static extern int UuidCreateSequential(out Guid guid);
}
public static Guid CreateSequentialGuid()
{
const int RPC_S_OK = 0;
Guid guid;
int result = NativeMethods.UuidCreateSequential(out guid);
if (result == RPC_S_OK)
return guid;
else
return Guid.NewGuid(); //<--In debugging, this statement never runs.
}
-Code in einer Schleife verwendet, um neue GUIDs und Informationen in die Tabelle einfügen:
Guid mySequentialGUID = CreateSequentialGuid();
string[] row = { item1,
item2,
item3,
sourceText,
encoding.ToString(),
mySequentialGUID.ToString()
};
var listViewItem = new ListViewItem(row);
myListView.Items.Add(listViewItem);
Edit: Bitte sehen Sie diese Frage Sequentielle GUIDs verstehen:
- What are the performance improvement of Sequential Guid over standard Guid?
- Advantages and disadvantages of GUID/UUID database keys
Eine GUID existiert als eindeutige Nummer. Nicht mehr und nicht weniger. Es gibt zwar verschiedene Algorithmen, mit denen Sie diese generieren können, aber Sie sollten sich nicht auf bestimmte Eigenschaften bestimmter Implementierungen verlassen. Führe eine 'GUID' als GUID aus, nicht mehr. Wenn Sie eine inkrementierende Zahl benötigen, dann * erhalten Sie eine Zahl und erhöhen Sie sie *, anstatt eine GUID zu verwenden, was * nur * eine Darstellung einer Möglichkeit zur Erzeugung von * eindeutigen * Zahlen ist. – Servy
Ich habe noch nie von einer sequentiellen GUID gehört, aber das scheint völlig falsch zu sein. Hast du das erfunden? Eine GUID ist von Natur aus einzigartig und Sie können nicht steuern, wie sie generiert wird. Wenn Sie * wissen *, was die nächste GUID ist, die erzeugt wird (weil es die nächste GUID ist, die Sie erzeugt haben), dann ist es nicht eindeutig, da jemand anders dasselbe tun kann, beginnend mit dem gleichen Startwert. –
@ rory.ap Ich habe keine sequentielle GUID erstellt. Es gibt sogar eine eingebaute Methode, um sequentielle GUIDS in Transact-SQL zu erzeugen, genannt NewSequentialID(). https://msdn.microsoft.com/en-us/library/ms189786.aspx –