Я нашел хороший question для измерения производительности функции, и ответы рекомендуют использовать секундомер следующим образом
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Но это действительно, если вы работаете под машиной с несколькими процессорами? поток может быть переключен на другой процессор, не так ли? То же самое должно быть в Enviroment.TickCount. Если да, я должен обернуть свой код внутри BeginThreadAffinity следующим образом
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
P.S
Переключение может происходить на уровне потока не только на уровне процессора, например, если функция работает в другом потоке, поэтому система может переключить ее на другой процессор, если это произойдет, будет ли секундомер работоспособен после этого переключения?
Я не использую секундомер для измерения только для измерения, но также для имитации функции таймера с помощью Thread.Sleep(для предотвращения перекрытия вызовов)