taras_33 писал(а):Мои выводы таковы: Тестировал на LV2016 разница между In Place и Replace Array минимальна, удаление а затем build проигрывает по скорости в 6-7 раз.
И правда, это даже меня немного удивило - несмотря на большое число копий In Place отлично справляется с заданием, даже лучше Replace. У меня получились вот такие результаты:
В общем случае строка/столбец не обязаны находиться в начале или в конце массива, поэтому я заменил Build Array на Insert Into Array, и также вставил вторую In Place структуру внутрь первой. Вообще, использование Build для ≥2-мерных массивов ни разу не оправдано, т.к. IIA справляется с этим лучше:
вот почему. Также не вижу смысла выполнять все варианты сразу в Sequence или, что того хуже, параллельно, т.к. это искусственно замедлит работу программы, а в итоге-то всё равно будет выбран один вариант, который будет исполняться не так часто, что в принципе равносильно однократному запуску теста. Разброс от запуска к запуску в пределах сотых мс. Рассмотрел также 4-й вариант - "грязный хак", как я его назвал - прямая запись в транспортный буфер (MoveBlock).
Результат: In Place и RAS примерно одинаково быстро отрабатывают, In Place чуть быстрее. IIA очень сильно остаёт от них, про BA я уж молчу. MoveBlock неплохо справляется, но явно не лучше RAS, хотя фактически это аналог In Place, но с доп. обёрткой в виде CLFN, что картину только ухудшает (
создаёт доп. копии параметров при передаче во внешний код). Больше тут особо добавить нечего, кроме пожалуй того, что любые массивы в
хранятся линейно, байт за байтом. Именно поэтому на запись столбца уходит больше времени, чем на запись строки: строку можно записать блоком за одну операцию, тогда как для записи столбца приходится городить доп. цикл For и писать поэлементно. См. также
How LabVIEW Stores Data in Memory.