Vergleichen Sie nicht Guid
s als Zeichenfolgen, und erstellen Sie keine neue Guid
Form einer Zeichenfolge, nur um es mit einer vorhandenen Guid
zu vergleichen. beiseite
Performance, ist es nicht ein einziges Standardformat für eine Guid
als String darstellt, so laufen Sie Gefahr, inkompatibler Formate zu vergleichen, und Sie haben Fall zu ignorieren, sei es durch String.Compare
Konfiguration so zu tun, oder die Umwandlung jeder zu Kleinbuchstaben.
Eine viel idiomatische und performante Art und Weise ist ein statischen zu schaffen, nur lesbar Guid
von dem konstanten Stringwert und für alle Vergleiche mit nativen Gleichheit Guid:
const string sid = "3f72497b-188f-4d3a-92a1-c7432cfae62a";
static readonly Guid guid = new Guid(sid);
void Main()
{
Guid gid = Guid.NewGuid(); // As an example, say this comes from the db
Measure(() => (gid.ToString().ToLower() == sid.ToLower()));
// result: 563 ms
Measure(() => (gid == new Guid(sid)));
// result: 629 ms
Measure(() => (gid == guid));
// result: 10 ms
}
// Define other methods and classes here
public void Measure<T>(Func<T> func)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for(int i = 1;i<1000000;i++)
{
T result = func();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
So String-Vergleich und eine neues Guid
von der Schaffung Konstanter Wert ist 50-60-mal teurer als der Vergleich des Guid
mit einem statischen, schreibgeschützten Guid
, der aus dem konstanten Wert erstellt wurde.
Warum profilieren Sie es nicht selbst? –
Weil ich nicht weiß ob es ein "etwas anderes" gibt –
Müssen Sie * sie * als Strings vergleichen? Der beste Weg, sie zu vergleichen, ist wahrscheinlich, sie als 'Guid'-Typen zu vergleichen (d. H.' Gid == new Guid (sid); '), es sei denn, du machst das Millionen Male in schneller Folge oder so. – itsme86