Выбрать главу

4. Используйте показатели производительности алгоритмов, генерируемые средствами мониторинга, которые доступны в настольных компьютерах и серверах. Для сред выполнения, функционирующих на настольных компьютерах и серверах, разработаны потрясающие средства, предназначенные для мониторинга работы управляемого кода. В настоящее время средства этой категории пока значительно опережают аналогичные им инструментальные средства, разработанные для устройств; вероятно, в течение некоторого времени такая ситуация будет сохраняться. Частично это объясняется тем, что рынок настольных компьютеров и серверов существует дольше, а частично — тем фактом, что в средах выполнения, предназначенных для настольных компьютеров и серверов, для поддержки утилит мониторинга могут выделяться гораздо большие объемы памяти. Можно ожидать, что в ближайшее время среды выполнения, используемые на устройствах, а вместе с ними и соответствующие средства получения эксплуатационных характеристик программ, получат дальнейшее развитие, однако по-прежнему будут уступать своим аналогам, ориентированным на настольные компьютеры и серверы. Поставляемые для настольных компьютеров и серверов средства, позволяющие анализировать работу приложений, способны обеспечивать получение детальной картины того, на выполнение каких функций приходится основная доля процессорного времени, и какие участки кода могут тормозить выполнение программ. Кроме того, современные средства мониторинга работы кода часто интегрируются в стандартные среды разработки приложений, что значительно упрощает проведение указанного анализа. Запуск кода, изначально предназначенного для устройств, в среде настольного компьютера или сервера позволит вам получить представление о возможностях его выполнения на этих платформах и глубже разобраться в особенностях его поведения в условиях устройств. Примечание. Имейте в виду, что механизмы JIT-компиляции, обработка исключений и стратегии сборки мусора для настольных компьютеров, серверов и устройств могут существенно отличаться друг от друга. Возможности настольных компьютеров и серверов в отношении доступных объемов памяти значительно превышают возможности мобильных устройств, а для каждого типа микропроцессоров существуют свои области вычислений, в которых он превосходит другие типы. Результаты мониторинга работы приложения, полученные на настольном компьютере или сервере, могут дать вам много полезной информации, но некоторые из характеристик приложения при выполнении на устройстве могут измениться. Подобные различия будут становиться особенно заметными тогда, когда в коде интенсивно используются операции файлового ввода-вывода, выполняется обмен данными по сети или обрабатывается графика, поскольку производительность кода в этих случаях будет в значительной мере зависеть от используемого оборудования и операционной системы. Инструментальные средства мониторинга, используемые на настольных компьютерах и серверах, помогут вам развить свою интуицию и глубже разобраться в особенностях распределения памяти для объектов, но окончательные выводы вы должны делать только на основании результатов, полученных при выполнении приложения на устройствах.

5. Используйте данные относительно использования памяти, полученные с помощью средств операционной системы и средств мониторинга на основе собственного кода, предоставляемых устройством. Для получения данных хронометража, а также данных по использованию памяти приложением, характеризующихся повышенным разрешением, во многих случаях могут быть привлечены системные вызовы операционной системы, использующие собственный код. Кроме того, для получения статистических данных, характеризующих работу программы, можно привлекать инструментальные средства мониторинга, написанные с использованием собственных кодов. Если вы создаете компоненты или приложения на основе собственного кода, то эти именно эти данные и являются тем, что вам нужно; в этом случае вам остается только засучить рукава и приступить к измерениям. Если же вы пытаетесь получить информацию о производительности приложения, создаваемого на основе управляемого кода, то ситуация несколько осложняется. Если данные об использовании памяти системой или приложением получены средствами операционной системы, то необходимо учесть, что поведение управляемой среды в отношении использования памяти лишь в общих чертах коррелирует с поведением системы. Ввиду периодического выполнения таких операций, как сборка мусора, кривая использования памяти, вероятнее всего, будет иметь пилообразную форму, соответствующую постепенному накоплению неиспользуемых объектов в памяти и последующему периодическому освобождению памяти от них в результате работы сборщика мусора. Тем не менее, эта информация вам может пригодиться, если вы пытаетесь выяснить причины утечки памяти, происходящей на протяжении длительных промежутков времени. Кроме того, вы можете вызвать сборщик мусора еще до измерения объема используемой памяти, однако поступать так следует лишь в целях тестирования; вызовы сборщика мусора непосредственно в коде при обычном выполнении приложения почти всегда приводят к снижению производительности. Как бы то ни было, для получения информации о расходе памяти непосредственно из операционной системы могут потребоваться системные вызовы, использующие собственный код, с последующей коррекцией результатов. Если же вы можете получить необходимые вам данные из управляемой среды, то все делается намного проще.