Измерьте время, занятое функцией, и не понимайте, почему разница во времени отрицательна - PullRequest
3 голосов
/ 07 января 2011

Я пытаюсь проверить, сколько времени занимает выполнение функции в моем коде:

Я сделал это:

void foo()
{

int time = System.DateTime.Now.Millisecond;

// code of my function. do this, that, etc.

Console.WriteLine((System.DateTime.Now.Millisecond-time).ToString());

}

Что я получу, это:

-247

Я не понимаю, почему минус ??И, пожалуйста, скажите мне, как измерить время, затраченное функцией.& Если pro-filer является опцией, пожалуйста, порекомендуйте мне несколько простых опций.

Примечание. Здесь я показал консольное приложение, но на практике мне нужно веб-приложение в ASP.NET, которое может быть n-уровневымархитектура также.

Спасибо

Ответы [ 5 ]

22 голосов
/ 07 января 2011

DateTime.Millisecond возвращает миллисекундную часть текущей даты / времени, а не миллисекунды с некоторой предыдущей даты / времени.

Используйте Секундомер :

var stopwatch = Stopwatch.StartNew();

// ...

Console.WriteLine(stopwatch.ElapsedMilliseconds);
2 голосов
/ 07 января 2011

Вы используете и вычитаете текущую миллисекунду

, например

  • 2010-01-01 00: 00: 00: 999 -> System.DateTime.Now.Millisecond равен 999
  • 2010-01-01 00: 00: 01: 000 -> System.DateTime.Now.Millisecond равен 000

000 - 999 = -999; не очень полезно!

Использование DateTime. Теперь профиль не рекомендуется. Если вы просто пытаетесь понять, вам, вероятно, стоит взглянуть на System.Diagnostics.Stopwatch : -

void Foo()
{
  Stopwatch myStopWatch = StopWatch.StartNew()

  // Your code goes here;

  Console.WriteLine(myStopWatch.ElapsedMilliseconds);
}

Для использования в реальном мире, лучше использовать профилировщик.

1 голос
/ 07 января 2011

Свойство Миллисекунда возвращает миллисекунды компонента даты, то есть число между 0 и 999.

Как уже говорили другие, выможно использовать класс StopWatch или вызвать метод DateTime.Subtract () , чтобы получить экземпляр TimeSpan , затем использовать TotalMilliseconds свойство этого экземпляра, чтобы получить общее количество прошедших миллисекунд между вашими двумя разами:

public void Foo()
{
    DateTime then = DateTime.Now;
    // ...
    Console.WriteLine(DateTime.Now.Subtract(then).TotalMilliseconds);
}
1 голос
/ 07 января 2011

DateTime.Millisecond возвращает миллисекундную составляющую текущего времени.
Другими словами, он возвращает общее количество мод в миллисекундах 1000.
Например, если вам случится получить свойство точно в конце секунды, оно будет равно 0.

Вместо этого вы должны использовать класс Stopwatch.

0 голосов
/ 07 января 2011

Вы можете использовать Секундомер .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...