Ответ 1
using System.Diagnostics;
//...
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++) {
// cpu intensive sequence
}
stopwatch.Stop();
elapsed_time = stopwatch.ElapsedMilliseconds;
Мне нужно время выполнения кода, написанного на С#. Использование DateTime.Now Я получаю неправильные значения для поля миллисекунды. Например:
int start_time, elapsed_time;
start_time = DateTime.Now.Millisecond;
for(int i = 0; i < N_ITER; i++) {
// cpu intensive sequence
}
elapsed_time = DateTime.Now.Millisecond - start_time;
elapsed_time дает отрицательные значения.
Как я могу заменить DateTime, чтобы получить фактическое значение прошедшего времени?
using System.Diagnostics;
//...
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++) {
// cpu intensive sequence
}
stopwatch.Stop();
elapsed_time = stopwatch.ElapsedMilliseconds;
Этот ответ только пытается подсчитать общее количество прошедших миллисекунд между двумя моментами, где время получено непосредственно из DateTime.Now
. Что касается разговора, он понял, что DateTime.Now
уязвим для внешних воздействий. Следовательно, лучшим решением будет использование класса Stopwatch
. Здесь ссылка, которая лучше объясняет (IMO) и обсуждает производительность между DateTimeNow, DateTime.Ticks, StopWatch.
Оригинальный ответ
Вопрос в том, как вы преобразуете его в int. Вам нужно лучшее литье и дополнительные элементы :) Это может выглядеть просто по сравнению с эффективным таймером. Но это работает:
DateTime startTime, endTime;
startTime = DateTime.Now;
//do your work
endTime = DateTime.Now;
Double elapsedMillisecs = ((TimeSpan)(endTime - startTime)).TotalMilliseconds;
В Интернете есть ссылка, которую вы также можете проверить.
Вы ищете класс Stopwatch. Он специально предназначен для возврата высокоточных измерений времени.
var stopwatch = new Stopwatch();
stopwatch.Start();
for (int i = 0; i < N_ITER; i++)
{
// cpu intensive sequence
}
stopwatch.Stop();
var elapsed = stopwatch.ElapsedMilliseconds;
DateTime.Millisecond возвращает миллисекундную долю секунды, начиная с 0-999. При выполнении таймингов вам нужно будет учитывать остальную часть времени.
Однако вы должны изучить класс StopWatch для таких временных интервалов производительности.
Вот что я использовал для получения времени для простого вычисления:
class Program
{
static void Main(string[] args)
{
Decimal p = 0.00001m;
Decimal i = 0m;
DateTime start = new DateTime();
DateTime stop = new DateTime();
for (i = p; i <= 5; i = i + p)
{
Console.WriteLine("result is: " + i);
if (i==p) start = DateTime.Now;
if (i==5) stop = DateTime.Now;
}
Console.WriteLine("Time to compute: " + (stop-start));
}
}
Это работает для меня:
var lapsedTime = DateTime.Now.Subtract(beginTime).TotalMilliseconds;