Я очень подозреваю, что использование любого из них даст вам те же результаты. Несущественные отличия.
- personOnly Bolivian Here  schedule08.08.2011
DateTime может быть очень неточным, если вы пытаетесь измерить производительность с желаемой точностью. Итак, для вас; если для вас важны результаты, вы можете исключить DateTime.
- personvcsjones  schedule08.08.2011
comment
Я не понимаю, как это точный дубликат. Я подозреваю, что его сбор репутации преследует цель пометить вопросы как дубликаты и закрыть их.
- personRohit  schedule18.08.2012
comment
Это НЕ дубликат других указанных вопросов. Этот вопрос касается накладных расходов на звонок. Остальные вопросы касаются только точности возвращаемой информации.
- personNeville Cook  schedule30.03.2015
Stopwatch ничего не делает между вызовами Start и _3 _... Он просто сохраняет текущую метку времени (через QueryPerformanceCounter), когда вы ее запускаете, и сравнивает ее с текущей меткой времени, когда вы ее останавливаете. Таким образом, нет причин, по которым это могло бы повлиять на производительность вашего кода, по крайней мере, незначительно. Stopwatch был разработан специально для точного измерения времени, поэтому вы можете быть уверены, что он полностью оптимизирован. Это также намного точнее, чем сравнение последовательных значений DateTime.Now. ...
personThomas Levesqueschedule08.08.2011
comment
Вопрос также в том, что делает секундомер внутри вызовов Start () и Stop () и как это влияет на приложение. Анализатор производительности VS2013 показывает, что Stopwatch.Stop () тратит около 0,92% (приложение выполняет 80000 запросов sql, 1thread, sw.Start () / sw.Stop () перед каждым)
- personmistika; 16.06.2017
comment
Объяснение, которое я искал.
- personNeo; 09.12.2017
Поскольку ваш код профилирования выполняется только один раз, его влияние на производительность должно быть незначительным. Это проблема только в том случае, если вы помещаете вызовы секундомера внутри своего внутреннего цикла / критических кодовых путей.
GetTickCount() должен быть одним из самых быстрых способов профилирования, но с точностью до нескольких миллисекунд. Функция GetTickCount() Windows API проверяет только простую переменную (которая обновляется каждые несколько миллисекунд); его стоимость - это стоимость вызова собственного метода и не более того. Он представлен как Environment.TickCount в .NET. Но, как я уже сказал, я сомневаюсь, что это имеет значение. DateTime.UtcNow/Now имеют ту же (низкую) точность, что и GetTickCount.
Теоретически на джиттер может быть какое-то влияние, но это маловероятно.
С точки зрения производительности, я сомневаюсь, что есть такая большая разница в том, как Start () и DateTime.Now сохраняют значения из соответствующей системы измерения и при извлечении миллисекунд вычисляют разницу и преобразуют (при необходимости) в соответствующая единица измерения
Я не думаю, что это действительно имеет значение, если вы вызываете его всего несколько раз. Однако все зависит от того, какой уровень точности вы запрашиваете; Stopwatch намного точнее, потому что он полагается на QueuePerformanceCounter API, поэтому он использует более высокое разрешение.
Я думаю, что второй будет более эффективным с точки зрения производительности, и, как указывают ссылки в комментарии, если вы хотите измерить время ниже секунд, DateTime не будет точным, хотя он был бы эффективным.
Я так думаю, потому что StopWatch будет постоянно измерять тики по сравнению с DateTime, который будет содержать только один экземпляр DateTime, то есть startTime.
personHaris Hasanschedule08.08.2011
comment
+1 за первое правильное предложение. Получение текущего DateTime - это просто чтение счетчика из памяти. Однако, как вы говорите, производительность - это не тот показатель, о котором здесь нужно думать, ее точность.
- personnawfal; 22.04.2013
DateTime
может быть очень неточным, если вы пытаетесь измерить производительность с желаемой точностью. Итак, для вас; если для вас важны результаты, вы можете исключитьDateTime
. - person vcsjones   schedule 08.08.2011