0

У меня есть функция, назовем ее foo(), которая выполняет некоторые операции над матрицами. Если я вызываю функцию в консольном приложении, для возврата результатов требуется 1 секунда. , если я вызываю его в приложении формы Windows (нажмите кнопку, запустите новый поток, вызовите foo() из потока), для возврата функции требуется 3 секунды. с теми же входами и одинаковыми выходами. Я думаю, что это связано с тем, что поток, обрабатывающий форму окон, все еще активен, как я могу остановить его или замедлить его, придав меньший приоритет?приоритет нити и время выполнения функций

+0

Не думайте. Мера. –

+0

Я использую c_clock для измерения времени для вычисления функции, не знаю, как измерить время, потраченное на обработку потока, поскольку я не знаю, как получить доступ к этому потоку, поэтому я «думаю» – andrea

+0

Я имею в виду используйте профилировщик. Измерение с помощью 'clock' будет очень неточным, так как .NET делает много вещей за вашей спиной, что может испортить такие простые меры. –

ответ

1

Я действительно не понимаю, почему вы хотели бы убить поток событий формы. Это сделает ваше приложение непригодным. В любом случае, этот поток не выполняет интенсивные вычислительные задачи, он ждет событий в форме, поэтому мало что можно сделать, если установить приоритет на низкий.

Укажите, как именно вы измеряете время, необходимое для завершения резьбы. Существуют определенные накладные расходы, связанные с запуском/остановкой потоков, которые не отображаются в вашем консольном приложении.

+0

Я делаю так: clock_t finish (clock()); Foo(); clock_t finish (clock()); int n = finish-start; в случае с консолью значение составляет около 1000, в форме окна - около 3500. Это звучит очень странно для меня. функция действительно такая же, я добавил поток, вызванный нажатием кнопки ... и вот оно – andrea

+0

Как вы сигнализируете «n» из потока и отображаете его, или останавливаете поток на отладчике и проверяете это после его расчета? Значение должно быть таким же, как намечено @Tudor - это тот же самый основной тип, который выполняет ту же работу. В тикетах 1000-3000 процессоров вам не повезло бы найти, что foo() было прервано чем-либо, и я уверен, что вы сделали тест более одного раза. После запуска любого потока очень вероятно, что foo() будет работать только до возврата и второго вызова clock_t. –

+0

Я обнаружил, что функция, определенная в библиотеке opencv, принимает в 4 раза больше в виде окон, чем в консоли. Я просто переписал функцию, и производительность почти такая же. – andrea

Смежные вопросы