Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet20/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   16   17   18   19   20   21   22   23   ...   71
Bog'liq
Abramyan-Pascal2016-1

Замечание. При анализе быстродействия программ следует правильно 
выбрать режим их выполнения. Если программа запущена по нажатию 
клавиши F9 (этот вариант запуска связан с командой меню «Программа | 
Выполнить»), то она будет выполняться в режиме отладки (debug mode). 
В этом режиме компилятор добавляет к программе дополнительный код, 


Глава 3. Массивы и последовательности 
39 
который облегчает выявление и исправление ошибок времени выполнения
но замедляет работу программы. Чтобы этого избежать, следует запустить 
программу в режиме релиза (release mode), в котором отладочный код к 
программе не добавляется. В системе PascalABC.NET для запуска про-
граммы в режиме релиза необходимо предварительно откорректировать 
настройки системы. Окно настроек вызывается командой «Сервис | 
Настройки…»; в этом окне надо перейти в раздел «Опции компиляции» и в 
этом разделе снять флажок «Генерировать отладочную информацию (De-
bug-версия)», после чего нажать кнопку «ОК». Кроме того, для запуска в 
режиме релиза необходимо использовать комбинацию Shift+F9 (связанную 
с командой меню «Программа | Выполнить без связи с оболочкой»). В этом 
случае для программы создается консольное окно, в котором выполняется 
ввод-вывод данных. Приводимые в книге результаты, связанные с измере-
нием времени, получены при запуске программ в режиме релиза. 
Приведем вариант выведенных данных (первое число всегда будет 
одинаковым, а второе зависит от быстродействия компьютера): 
200000000 2594 
В исходной последовательности содержатся сто миллионов единиц. 
Метод Select преобразует каждую единицу в двойку. Полученная последо-
вательность сохраняется в переменной a, и затем ее элементы суммируют-
ся в цикле foreach. Важно понять, что перебор элементов выполняется 
только в цикле foreach. Казалось бы, для удвоения элементов в запросе Se-
lect их тоже надо перебрать, однако это излишне: достаточно к информа-
ции о содержимом исходной последовательности добавить новую инфор-
мацию о том, как преобразовать эти элементы в тот момент, когда они 
потребуются. Ясно, что это действие выполняется быстро и не зависит от 
фактического размера последовательности. Указанный фрагмент, как и 
предыдущий, практически не использует оперативную память, так как все 
элементы исходной последовательности создаются, преобразуются и нако-
нец суммируются по очереди, в цикле foreach. 
Поскольку мы уменьшили размер исходного набора в 10 раз, нам 
удастся создать массив требуемого размера и выполнить с его помощью 
такие же действия: 
// Вариант 2 
var a := ArrFill(100000000, 1); 
for var i := 0 to a.Length - 1 do 
a[i] *= 2; 
var sum := 0; 
foreach var e in a do 
sum += e; 
Print(sum, Milliseconds); 


40 
При запуске этой программы на том же компьютере был получен сле-
дующий результат: 

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   16   17   18   19   20   21   22   23   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling