Ich bin neu in C# Welt. Ich versuche die Zeit zu berechnen, die ein Algorithmus für den Vergleich benötigt. Der folgende Code misst die verstrichene Zeit vom Aufruf einer Subroutine bis zur Rückkehr der Subroutine zum Hauptprogramm. Dieses Beispiel stammt aus "Datenstrukturen durch C#" von Michael McMillan. Nach dem Ausführen dieses Programms ist die Ausgabe Time = 0, was falsch ist. Das Programm scheint logisch korrekt zu sein. Kann mir jemand helfen. Im Folgenden finden Sie den CodeBenötigte Zeit für einen Prozess
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Chap1
{
class chap1
{
static void Main()
{
int[] nums = new int[100000];
BuildArray(nums);
Timing tObj = new Timing();
tObj.startTime();
DisplayNums(nums);
tObj.stopTime();
Console.WriteLine("Time: " + tObj.result().TotalSeconds);
Console.WriteLine("Start Time: " + tObj.startTime().TotalSeconds);
Console.WriteLine("Duration : " + tObj.result().TotalSeconds);
Console.ReadKey();
}
static void BuildArray(int[] arr)
{
for (int i = 0; i <= 99999; i++)
arr[i] = i;
}
static void DisplayNums(int[] arr)
{
for (int i = 0; i <= arr.GetUpperBound(0); i++)
Console.WriteLine(arr[i]);
}
}
class Timing
{
TimeSpan StartTiming;
TimeSpan duration;
public Timing()
{
StartTiming = new TimeSpan(0);
duration = new TimeSpan(0);
}
public TimeSpan startTime()
{
GC.Collect();
GC.WaitForPendingFinalizers();
StartTiming = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
return StartTiming;
}
public void stopTime()
{
duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(StartTiming);
}
public TimeSpan result()
{
return duration;
}
}
}
Führen Sie es nicht im Debug-Modus (nach einigen Online-Ressourcen). – Kiril
Ich hatte das gleiche Problem! Ben Voigt hat recht, man kann nicht davon ausgehen, dass der Thread mit dem Index 0 (INDEX, nicht Thread ID !!!) derjenige ist, an dem Sie interessiert sind. Ich benutze nun ein PInvoke um GetCurrentThreadId() zu bekommen um die richtige Thread ID zu bekommen . Dann durchlaufe ich alle Threads und suche nach dem mit dieser Thread-ID. – Jane