Ich programmiere ein Benchmark-Tool, das in einem Thread eine Reihe von Variablen von einem lokalen Server liest.
int countReads = 1000;
Int64 count = 0;
for (int i = 0; i < countReads; i++)
{
Thread.CurrentThread.Priority = ThreadPriority.Highest;
DateTime start = DateTime.Now;
session.Read(null, 0, TimestampsToReturn.Neither, idCollection, out ReadResults, out diagnosticInfos);
DateTime stop = DateTime.Now;
Thread.CurrentThread.Priority = ThreadPriority.Normal;
TimeSpan delay = (stop - start);
double s = delay.TotalMilliseconds;
count += (Int64)s;
Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
progressBar1.Value = i;
}));
}
double avg = (double)count / countReads;
Dispatcher.Invoke(DispatcherPriority.Input, new Action(() =>
{
listBox1.Items.Add(avg);
}));
Ich berechne die Zeitspanne, die für den Lesevorgang benötigt wurde, und ermittle die durchschnittliche Zeitspanne am Ende.
DateTime start = DateTime.Now;
session.Read(null, 0, TimestampsToReturn.Neither, idCollection, out ReadResults, out diagnosticInfos);
DateTime stop = DateTime.Now
Wenn ich den Code ohne Aktualisierung des Fortschrittsbalkens ausführe, dauert es im Durchschnitt etwa 5 ms. aber wenn ich es mit
Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
progressBar1.Value = i;
}));
dauert es im Durchschnitt etwa 10 ms.
Meine Frage ist, warum ist die Zeitspanne höher, wenn ich den Fortschrittsbalken verwende? Ich berechne nur die Zeitspanne für das Lesen. Die Aktualisierung des Fortschrittsbalkens wird nicht berücksichtigt.
Gibt es eine Möglichkeit, die ui-Bemalung zu entfernen, so dass sie sich nicht auf meine Lesezeit auswirkt?
Vielen Dank für Ihre Hilfe.
Mit freundlichen Grüßen