Da mir die Genauigkeit nicht besonders wichtig ist, habe ich sie verglichen. Ich erfasse viele Pakete im Netzwerk und möchte die Zeit setzen, wann ich jedes Paket erhalte. Hier ist der Code, der 5 Millionen Iterationen testet
int iterationen = 5000000;
// Test mit datetime.now
{
var datum = DateTime.UtcNow.AddHours(DateTime.UtcNow.Second);
var jetzt = DateTime.UtcNow;
for (int i = 0; i < iterationen; i++)
{
if (datum == DateTime.Now)
Console.WriteLine("ist es!");
}
Console.WriteLine($"Die Ausführung von {iterationen} Iterationen mit datetime.now ist abgeschlossen. Es dauerte {(DateTime.UtcNow - jetzt).TotalSeconds} Sekunden");
}
// Test mit datetime.utcnow
{
var datum = DateTime.UtcNow.AddHours(DateTime.UtcNow.Second);
var jetzt = DateTime.UtcNow;
for (int i = 0; i < iterationen; i++)
{
if (datum == DateTime.UtcNow)
Console.WriteLine("ist es!");
}
Console.WriteLine($"Die Ausführung von {iterationen} Iterationen mit datetime.utcnow ist abgeschlossen. Es dauerte {(DateTime.UtcNow - jetzt).TotalSeconds} Sekunden");
}
// Test mit stopwatch
{
Stopwatch sw = new Stopwatch();
sw.Start();
var jetzt = DateTime.UtcNow;
for (int i = 0; i < iterationen; i++)
{
if (sw.ElapsedTicks == DateTime.Now.Ticks)
Console.WriteLine("ist es!");
}
Console.WriteLine($"Die Ausführung von {iterationen} Iterationen mit stopwatch ist abgeschlossen. Es dauerte {(DateTime.UtcNow - jetzt).TotalSeconds} Sekunden");
}
Die Ausgabe lautet:
Ausführung von 5000000 Iterationen mit datetime.now ist abgeschlossen. Es dauerte 0.8685502 Sekunden
Ausführung von 5000000 Iterationen mit datetime.utcnow ist abgeschlossen. Es dauerte 0.1074324 Sekunden
Ausführung von 5000000 Iterationen mit stopwatch ist abgeschlossen. Es dauerte 0.9625021 Sekunden
Also ist DateTime.UtcNow die schnellste, wenn Ihnen die Genauigkeit nicht besonders wichtig ist. Dies unterstützt auch die Antwort https://stackoverflow.com/a/6986472/637142 zu dieser Frage.
0 Stimmen
Übrigens, wenn Sie nicht auf der Suche nach etwas Schnellem und Dreckigem sind, können Leistungsindikatoren verwendet werden.
1 Stimmen
Wenn Sie eine größere Genauigkeit benötigen, verwenden Sie Stopwatch.GetTimestamp, ansonsten ist die Antwort gut.
0 Stimmen
@dbasnett Können Sie in einer Antwort mehr ins Detail gehen?
0 Stimmen
Im obigen Beispiel ändern Sie start und endtime in long und weisen Sie ihnen statt DateTime.Now Stopwatch.GetTimestamp zu. Die benötigte Zeit beträgt (end-start)/Stopwatch.Frequency.
0 Stimmen
Siehe auch: Der Fall gegen DateTime.Now
0 Stimmen
Jedes Mal, wenn Sie DateTime.Now verwenden würden, fragen Sie sich, ob Sie nicht stattdessen DateTime.UtcNow verwenden sollten. Das gesagt, ist Stopwatch die richtige Lösung.
2 Stimmen
"Best" ist subjektiv. Diese Frage muss auf objektive Weise definieren, was mit "best" gemeint ist.