Полезные страницы: - [Официальная документация](https://learn.microsoft.com/ru-ru/dotnet/api/system.diagnostics.stopwatch?view=net-7.0) - [Хабр -> Под капотом у Stopwatch](https://habr.com/ru/articles/226279/) Позволяет замерить время работы участка кода. ### Точность в .Net-среде минимальное время замера 1 наносекунда (1 тик = 1 ns), но в Unity-среде (Mono или IL2CPP) минимальное время замера 100 наносекунд (1 тик = 1 ns). Дело в том, что в Unity Stopwatch делает минимум 10 млн тиков в секунду, а в .NET StopWatch делает минимум 1 млрд тиков в секунду. Сколько тиков делает StopWatch можно узнать, вызвав StopWatch.Frequency Количество тиков, которые `Stopwatch` отсчитывает за единицу времени, может варьироваться в зависимости от системы. Это связано с тем, что `Stopwatch` опирается на частоту аппаратного таймера процессора, которая может отличаться от одной машины к другой. Как сконвертировать тики в наносекунды: ```csharp private static double TicksToNs(double ticks) { return ticks / (Stopwatch.Frequency / (double)(1000L * 1000L * 1000L)); } ``` ### Измерение участков кода с маленьким временем выполнения в Unity, операция, которая по факту занимает примерно 30 наносекунд, stopwatch (юнитевый) показывает значение от 0 до 2 тиков (от 0 до 200 нс). ### Тики StopWatch и тики TimeSpan Если работаете с результатами Stopwatch в тиках, то не спутайте тики Stopwatch и тики TimeSpan. Обратите внимание, что Stopwatch хранит результат в тиках по данному "адресу" ```csharp tracker.ElapsedTicks ``` Когда вы используете свойство `Elapsed` класса `Stopwatch`, возвращаемый объект `TimeSpan` содержит информацию о времени, измеренном `Stopwatch`. У `TimeSpan` имеются свои тики, где один тик равен 100 наносекундам. Это стандартное определение тика для `TimeSpan` во всей системе .NET. ```csharp tracker.Elapsed.Ticks ``` ### Как использовать ```csharp //Инициализируем var tracker = new Stopwatch(); ``` Либо можно так инициализировать. Статический метод `StartNew()` создает новый экземпляр `Stopwatch` и сразу же начинает отсчет времени. ```csharp var tracker = Stopwatch.StartNew(); // Создание и немедленный запуск ``` ```csharp //Запускаем секундомер tracker.Start(); ``` [[Stopwatch restart()|Пример]] ```csharp //Можем сбросить значение секундомера без переинициализации tracker.Restart(); ``` ```csharp //Останавливаем секундомер tracker.Stop(); //выводим полученное время. var result = tracker.Elapsed.TotalMilliseconds; Console.WriteLine("result: "+ result); ``` В каких единицах можно получить результат ```csharp //Свойства ниже возвращают только компонент времени. //Например, если скрипт выполнится за 1 sec и 100 ms, то будет выведено только 100ms  tracker.Elapsed.Microseconds; tracker.Elapsed.Milliseconds; //Свойства ниже возвращают итоговое время в единице времени в какой пожелаете. tracker.Elapsed.TotalMicroseconds; tracker.Elapsed.TotalNanoseconds; //Два свойства ниже вернут одно и то же. tracker.ElapsedMilliseconds; tracker.Elapsed.Milliseconds; ```