Я нашел хороший вопрос для измерения производительности функции, и в ответах рекомендуется использовать секундомер следующим образом
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 (для предотвращения наложения вызовов)