У меня есть нормальная страница asp.net, содержащая некоторый код, для которого я хочу измерить время выполнения. Для этой цели я создал очень простой вспомогательный класс:
public class Timing
{
private long m_ticksBefore;
private long m_ticksAfter;
public void Before()
{
m_ticksBefore = DateTime.Now.Ticks;
}
public void After()
{
m_ticksAfter = DateTime.Now.Ticks;
}
public void TraceTime(string note)
{
TimeSpan span = new TimeSpan(m_ticksAfter - m_ticksBefore);
System.Diagnostics.Trace.Write(string.Format("\n...Timing for {0}...\nTicks: \t{1}\nMilliseconds: \t{2}\nSeconds: \t{3}\n..................", note, span.Ticks, span.TotalMilliseconds, span.TotalSeconds));
}
}
Я создаю экземпляр нового объекта Timing и оборачиваю код, который хочу отслеживать, с помощью методов Before () и After и, наконец, вызываю метод TraceTime (), чтобы вывести результат в окно вывода в IDE.
Странно то, что первый запрос к странице приводит к ожидаемому результату синхронизации приблизительно 40 миллисекунд, но обновление страницы (F5) дает мне 0 тиков времени выполнения. Даже выполнение страницы с новыми параметрами, заставляющими выполнять другой код в отслеживаемой области, показывает плоскость 0.
Если я вместо этого использую System.Diagnostics.StopWatch, я получаю гораздо более реалистичные результаты
Stopwatch watch1 = Stopwatch.StartNew();
//Some code to monitor
watch1.Stop();
System.Diagnostics.Trace.Write(watch1.ElapsedTicks);
Мне кажется, что код очень похож, и я не могу понять, почему первый подход не дает реалистичных результатов ...
Кажется, это какая-то проблема оптимизации, которая выполняется за кулисами, но я не совсем понимаю. Может быть, это из-за моей личной проблемы с синхронизацией, то есть из-за проблем со сном ...