Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling