Ускорение проектов на Netduino (взгляд разработчика настольных систем)

Грэг Дункан

Сегодняшнее сообщение от Марио Вернари (Mario Vernari) тесно связано со мной. Будучи разработчиком настольных систем, я могу оценить его точку зрения. Разработчики аппаратуры – очень своеобразные ребята, и требуют другого способа мышления («Нет? Действительно? Извините, я рассматриваю это утверждение, как не требующее доказательств Улыбка), и это сообщение покажет, почему…

Как заставить Netduino работать быстрее

Перед тем, как продолжить свою работу над графической библиотекой для светодиодной матрицы, я решил, что настало время слегка оптимизировать код, чтобы заставить Netduino работать быстрее.

Моя работа связана с программированием настольных приложений, используя .Net, но в ПК очень богат ресурсами, такими как оперативная память или производительность процессора. Напротив, Micro Framework представляет очень компактную среду, где каждых лишний байт может повлиять на конечный результат.

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

Набор тестов

Основная программа для тестов очень проста: это бесконечный цикл, в котором тестируемый код перемежается короткими паузами по 100 мс. Сравниваются, главным образом, различные часто используемые типы, такие как Int32, Single, Double и Byte.

Время измеряется с помощью приспособления, следящего за двумя выходными портами, и отмечающего, когда они изменяют свое состояние.

Кроме самого первого, каждый тест проходил 50 раз по набору из 20 операций, чтобы минимизировать накладные расходы за счет цикла for. Кстати, первый тест был нацелен на получение данных о расходах самого цикла for.

Он следует шаблону тестовой программы:

...

Основной цикл for

Так как каждый тест использует цикл for, мы должны знать, какую задержку он вносит.

Вот фрагмент кода…

clip_image002

clip_image004

...

Грубо говоря, мы можем считать, что каждый цикл for занимает около 7 микросекунд.

Как посмотреть на IL-код, генерируемый компилятором (ограничиваясь лишь циклом for)?

Довольно любопытно слегка заглянуть за (или под?) сцену. Я воспользуюсь преимуществом восхотительного ILSpy – свободно распространяемого декомпилятора с открытым исходным кодом, дизассемблера и еще много чего, предоставляемого командой SharpDevelop.

...

Если вас не пугает немного IL и вы хотите узнать, что же происходит с другой стороны кода, который вы пишите, прочитайте сообщение Марио полностью.