Я использую случай, когда мне нужно отслеживать несколько переменных во время выполнения и получать их диапазон значений (например: -0.156 до 10.165). Можно ли это сделать в Visual Studio, где я указываю набор интересных переменных и после выполнения, я получаю диапазон значений?
Лучший ответ:
[После выяснения приемлемого решения, я размещаю свои комментарии здесь.]
Я работаю с программой, где мне нужно отслеживать значения времени выполнения нескольких переменных и извлекать диапазон значений, наблюдаемых во время выполнения. Наличие контрольной точки для каждой переменной и ручное отслеживание диапазона практически невозможно. Другое решение – использовать точки трассировки и использовать функцию “Действие” Visual Studio для вывода измененного значения на консоль. Это решение также нецелесообразно в моем случае, потому что точка трассировки поражена большим количеством времени, и это замедляет выполнение до такой степени, когда оно не будет завершено даже через 10-20 минут.
C# — Дата и время — 79
Единственным возможным решением (по моему мнению) является добавление кода для ручного отслеживания диапазона значений с использованием переменных и последующего вывода значения в конце выполнения. Это решение не будет масштабироваться, так как будет громоздко изменять код отслеживания всякий раз, когда изменяется базовый код. Но в настоящее время это было самое быстрое решение, которое я смог найти.
Источник: techarks.ru
Инструментирование автономного компонента .NET Framework и сбор данных о времени с помощью профилировщика из командной строки
Область применения:Visual Studio
Visual Studio для Mac
Visual Studio Code
В этом разделе описывается использование средств профилирования из командной строки Visual Studio для инструментирования компонента платформа .NET Framework, например .exe или . DLL-файл и для сбора подробных данных о времени.
Для .NET Core и .NET 5+ см. статью Измерение производительности приложения из командной строки для сценариев инструментирования командной строки. VSInstr не поддерживается для двоичных файлов .NET Core и .NET 5+. Начиная с Visual Studio 2022 версии 17.6, мы рекомендуем использовать VSDiagnostics.exe и для платформа .NET Framework сценариев, так как он обеспечивает динамическое инструментирование.
Сведения о пути к Средствам профилирования см. в статье Указание пути к программам командной строки средств профилирования. На 64-разрядных компьютерах доступны 64- и 32-разрядные версии этих программ. Для использования программ командной строки профилировщика необходимо добавить путь к программам в переменную среды PATH окна командной строки или в саму команду.
Visual Studio 2022 | Установка, настройка, и начало работы
Чтобы собрать подробные данные о времени из платформа .NET Framework с помощью метода инструментирования, используйте средство VSInstr.exe для создания инструментированной версии компонента и средство VSPerfCLREnv.cmd для инициализации переменных среды профилирования. Затем запустите профилировщик.
При выполнении инструментированного компонента данные по времени автоматически сохраняются в файл данных. Вы можете приостановить и возобновить сбор данных в ходе сеанса профилирования.
Чтобы завершить сеанс профилирования, закройте целевое приложение и явным образом завершите работу профилировщика. В большинстве случаев рекомендуется сбрасывать переменные среды профилирования в конце сеанса.
Запуск сеанса профилирования
Чтобы начать профилирование с помощью метода инструментирования, выполните следующие действия.
- Откройте окно командной строки. Если необходимо, добавьте каталог средств профилировщика в переменную среды PATH. Во время установки этот путь не добавляется.
- Используйте программу VSInstr для создания инструментированной версии целевого приложения.
- Инициализируйте переменные среды профилирования .NET Framework. Тип: VSPerfClrEnv /traceon
- Запуск профилировщика. Тип: VSPerfCmd /start:trace /output: OutputFile [ Options ]
- Параметр /start:trace инициализирует профилировщик.
- Параметр /output: OutputFile является обязательным для параметра /start. OutputFile указывает имя и расположение файла данных профилирования (VSP-файла). С параметром /start:trace можно использовать любой из следующих параметров.
- Запустите целевое приложение из окна командной строки.
/user:[ Domain ] UserName | Указывает домен и имя пользователя учетной записи, которая является владельцем профилируемого процесса. Этот параметр является обязательным только в том случае, если процесс выполняется в качестве пользователя, отличного от пользователя, вошедшего в систему. Владелец процесса указан в столбце Имя пользователя на вкладке Процессы диспетчера задач Windows. |
/crossession | Включает профилирование процессов в других сеансах. Этот параметр является обязательным, если приложение ASP.NET выполняется в другом сеансе. Идентификатор сеанса указан в столбце Идентификатор сеанса на вкладке Процессы в диспетчере задач Windows. /CS можно указать как краткую версию /crosssession. |
/globaloff | Запускает профилировщик в состоянии приостановки сбора данных. Используйте параметр /globalon для возобновления профилирования. |
/counter: Config | Собирает данные от счетчика производительности процессора, указанного в Config . Сведения о счетчике добавляются в данные, собранные для каждого события профилирования. |
/wincounter: WinCounterPath | Задает счетчик производительности Windows, данные которого будут собираться во время профилирования. |
/automark: Interval | Используется с только с параметром /wincounter. Указывает время (в миллисекундах) между событиями сбора счетчика производительности Windows. Значение по умолчанию — 500 мс. |
/events: Config | Задает события трассировки событий для Windows (ETW), собираемые во время профилирования. События трассировки событий Windows собираются в отдельный ETL-файл. |
Управление сбором данных
Пока целевое приложение выполняется, вы можете управлять сбором данных путем запуска и остановки записи данных в файл данных профилировщика, используя параметры VSPerfCmd.exe. Управление сбором данных позволяет собирать данные на конкретных этапах выполнения программы, например при запуске или завершении работы приложения.
Чтобы запустить и остановить сбор данных, выполните приведенные ниже действия.
- Следующие пары параметров запускают и останавливают сбор данных. Каждый параметр необходимо указывать в отдельной командной строке. Сбор данных можно включать и отключать несколько раз.
ПараметрОписание /globalon /globaloff Запускает (/globalon) или останавливает (/globaloff) сбор данных для всех процессов. /processon: PID /processoff: PID Запускает ( /processon) или останавливает ( /processoff) сбор данных для процесса с указанным идентификатором процесса ( PID ). /threadon: TID /threadoff: TID Запускает ( /threadon) или останавливает ( /threadoff) сбор данных для потока с указанным идентификатором потока ( TID ).
Завершение сеанса профилирования
Чтобы завершить сеанс профилирования, закройте приложение, в котором выполняется инструментируемый компонент. Вызовите команду VSPerfCmd/shutdown, чтобы завершить работу профилировщика и закрыть файл данных профилирования. Команда VSPerfClrEnv /off сбрасывает переменные среды профилирования.
Чтобы завершить сеанс профилирования, выполните приведенные далее действия.
- Закройте целевое приложение.
- Завершите работу профилировщика. Тип: VSPerfCmd /shutdown
- (Необязательно) Сбросьте переменные среды профилирования. Тип: VSPerfClrEnv /off
Источник: learn.microsoft.com
Как узнать, сколько времени потребовалось для запуска моей программы в Visual Studio Code?
Есть ли способ узнать, сколько времени потребовалось для выполнения / завершения сценария в VS Code?
Я ищу такое сообщение:
Program finished in 30ms
Niel Agneessens 8 Авг 2019 в 12:29
Используйте команду оболочки для определения времени выполнения (Unix time ), для python используйте модуль timeit
8 Авг 2019 в 12:35
4 ответа
Лучший ответ
Когда ваш скрипт запускается:
import time start_time = time.time() do something # here your actual code/routine print(«Process finished — %s seconds —» % (time.time() — start_time))
Maeaex1 8 Авг 2019 в 12:34
Вы можете создать простую функцию декоратора для определения времени ваших функций.
Я предлагаю использовать time.monotonic (это часы, которые не идут назад), чтобы увеличить точность.
Axois 8 Авг 2019 в 13:26
Чтобы найти время выполнения вашей функции, предпочтительнее time.perf_counter (), а не time.time (). Подробнее см. Ссылку ниже
Вы можете создать свой собственный таймер, используя что-то вроде этого
from time import perf_counter def f(a1,a2): return a1 * a2 def timer(f,*args): start = perf_counter() f(*args) return (1000 * (perf_counter()-start)) # this returns time in ms a1 = np.random.rand(100) a2 = np.random.rand(100) np.mean([timer(f,a1,a2) for _ in range(100)]) # average out result for 100 runs
Если вы используете ноутбук jupyter, используйте следующие
%%timeit f(a1,a2)
Abhishek Sharma 5 Ноя 2020 в 18:00
Самый простой способ добиться этого — просто кодировать время для программирования.
from time import time start_time = time() main() # n staffs passed_time = time() — start_time print(f»It took «)
Источник: question-it.com