У меня есть функция, назовем ее foo(), которая выполняет некоторые операции над матрицами. Если я вызываю функцию в консольном приложении, для возврата результатов требуется 1 секунда. , если я вызываю его в приложении формы Windows (нажмите кнопку, запустите новый поток, вызовите foo() из потока), для возврата функции требуется 3 секунды. с теми же входами и одинаковыми выходами. Я думаю, что это связано с тем, что поток, обрабатывающий форму окон, все еще активен, как я могу остановить его или замедлить его, придав меньший приоритет?приоритет нити и время выполнения функций
ответ
Я действительно не понимаю, почему вы хотели бы убить поток событий формы. Это сделает ваше приложение непригодным. В любом случае, этот поток не выполняет интенсивные вычислительные задачи, он ждет событий в форме, поэтому мало что можно сделать, если установить приоритет на низкий.
Укажите, как именно вы измеряете время, необходимое для завершения резьбы. Существуют определенные накладные расходы, связанные с запуском/остановкой потоков, которые не отображаются в вашем консольном приложении.
Я делаю так: clock_t finish (clock()); Foo(); clock_t finish (clock()); int n = finish-start; в случае с консолью значение составляет около 1000, в форме окна - около 3500. Это звучит очень странно для меня. функция действительно такая же, я добавил поток, вызванный нажатием кнопки ... и вот оно – andrea
Как вы сигнализируете «n» из потока и отображаете его, или останавливаете поток на отладчике и проверяете это после его расчета? Значение должно быть таким же, как намечено @Tudor - это тот же самый основной тип, который выполняет ту же работу. В тикетах 1000-3000 процессоров вам не повезло бы найти, что foo() было прервано чем-либо, и я уверен, что вы сделали тест более одного раза. После запуска любого потока очень вероятно, что foo() будет работать только до возврата и второго вызова clock_t. –
Я обнаружил, что функция, определенная в библиотеке opencv, принимает в 4 раза больше в виде окон, чем в консоли. Я просто переписал функцию, и производительность почти такая же. – andrea
- 1. Изменить приоритет нити
- 2. Многопоточность Java - приоритет нити
- 3. Изменить приоритет нити ERROR_INVALID_HANDLE
- 4. Изменить приоритет нити - Unity 3d
- 5. Почему приоритет нити не влияет?
- 6. Как изменить приоритет ограничений во время выполнения
- 7. функция и приоритет выполнения функции
- 8. Приоритет нижней нити C# в пуле потоков
- 9. Вручную приоритет перегруженных функций
- 10. Перегрузка функций и шаблон вычет приоритет
- 11. Приоритет выполнения верблюжьей линии
- 12. Каков приоритет выполнения javascript?
- 13. Приоритет выполнения SAPI
- 14. Приоритет выполнения расширения Firefox
- 15. Перемещение функций во время выполнения - gcc
- 16. Трассировка неуправляемых вызовов функций во время выполнения?
- 17. Связывание функций с LD_PRELOAD во время выполнения
- 18. Объединение тел функций во время выполнения
- 19. Генерирование функций во время выполнения в C
- 20. Переименование функций во время выполнения в PHP
- 21. Время выполнения - с использованием применяемых функций
- 22. Выполнение хранимых функций во время выполнения
- 23. Необычное время выполнения функций даты в Oracle
- 24. Функция выполнения нити Python дважды
- 25. Приоритет параллельного выполнения ядра CUDA
- 26. выполнения приоритет запроса в MONGO
- 27. Переписывания уже скомпилированные функций во время выполнения
- 28. ActionScript 2.0, измеряет время выполнения функций?
- 29. создание функций во время выполнения в Python
- 30. R пакет и время выполнения
Не думайте. Мера. –
Я использую c_clock для измерения времени для вычисления функции, не знаю, как измерить время, потраченное на обработку потока, поскольку я не знаю, как получить доступ к этому потоку, поэтому я «думаю» – andrea
Я имею в виду используйте профилировщик. Измерение с помощью 'clock' будет очень неточным, так как .NET делает много вещей за вашей спиной, что может испортить такие простые меры. –