C# world cihazında yeni ürünler yapıyorum. Karşılaştırma amacıyla bir algoritma tarafından alınan zamanı hesaplamaya çalışıyorum. Aşağıdaki kod, alt programın ana programa geri dönünceye kadar bir alt programın çağrılmasından itibaren geçen süreyi ölçer. Bu örnek, Michael McMillan tarafından "C# ile veri yapıları" dan alınmıştır. Bu program çalıştırıldıktan sonra çıktı, yanlış olan Time = 0'dır. Program mantıksal olarak doğru gibi görünüyor. Birisi bana yardım edebilir mi. Aşağıdaki sadece ana işlevi yerde Timing
sınıfını kullanmayın ve ya zaman yazdırmak nerede görmüyorum kodBir işlemin tamamlanması için gereken süre
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;
}
}
}
Hata ayıklama modunda çalıştırmayın (bazı çevrimiçi kaynaklara göre). – Kiril
Aynı sorunu yaşadım! Ben Voigt haklı, doğru değilsiniz, dizin 0 (INDEX, değil Thread ID!) Ile ilgilendiren bir konu olduğunu düşünüyorum. Doğru iş parçacığı kimliğini almak için şimdi bir PInvoke GetCurrentThreadId() kullanıyorum . Daha sonra tüm iş parçacıklarını çözüyorum ve bu iş parçacığı kimliğine sahip olanı kontrol ediyorum. – Jane