저는 C#을 처음 사용합니다. 나는 비교 목적으로 알고리즘을 취한 시간을 계산하려고 시도하고 있습니다. 다음 코드는 서브 루틴이 호출 될 때부터 서브 루틴이 주 프로그램으로 돌아갈 때까지의 경과 시간을 측정합니다.이 예제는 Michael McMillan의 "C#을 통한 데이터 구조"에서 가져온 것입니다. 이 프로그램을 실행하면 출력이 Time = 0으로 잘못되었습니다. 프로그램이 논리적으로 올바른 것 같습니다. 아무도 나를 도울 수 있습니까? 다음은 주요 기능에 어디서나 Timing
클래스를 사용하지 않고 당신도 시간을 인쇄 어디 보이지 않는 코드프로세스가 완료되는 데 필요한 시간이
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;
}
}
}
일부 온라인 리소스에 따라 디버그 모드로 실행하지 마십시오. – Kiril
나는 똑같은 문제가 있었다! 벤 보이트 (Ben Voigt)는 맞습니다. 인덱스 0 (INDEX, Thread ID !!!)이있는 스레드가 관심있는 스레드라고 가정 할 수 없습니다. 이제 올바른 스레드 ID를 얻기 위해 PInvoke를 사용하여 GetCurrentThreadId . 그런 다음 모든 스레드를 반복하고 그 스레드 ID가있는 스레드를 확인합니다. – Jane