|
0 / 0 / 0
Регистрация: 05.11.2008
Сообщений: 27
|
|
Максимальная скорость фрагмента06.12.2011, 19:08. Показов 1508. Ответов 4
Метки нет (Все метки)
Есть некий фрагмент программы типа:
For i=0 to end1 For j=0 to end2 If massivA(i)=massivB(j) then massivC(k)=j Next j Next i где massivA, massivB - Byte массивы massivC - integer массив end1 и end2 порядка 10 000 000. Попробовал в VB.Net - медленно. Надо в 100 раз быстрее. Как сделать подобный код максимально быстрым? Есть ли API-функции или другие механизмы?
0
|
|
| 06.12.2011, 19:08 | |
|
Ответы с готовыми решениями:
4
Нужна максимальная скорость программы Скорость распространения волны и максимальная скорость колебаний частиц воздуха Максимальная длина монотонного фрагмента |
|
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
|
|
| 07.12.2011, 13:20 | |
|
Ускорения в 100 раз предложить не могу. Разве что приобрести самый быстрый компьютер
![]() Если серьезно, то в данном примере для достижения максимальной скорости работы с массивом следует попробовать следующее: 1) Оптимизацию надо начать с алгоритма. Раз end1 и end2 имеют значения порядка 10 000 000, то общее число повторений внутренностей цикла = 10^14. Возможно в некоторых случаях не нужно выполнять внутренний цикл до конца. Я не знаю что у тебя выступает в роли исходных данных и какой должен быть результат. Тебе это лучше знать. Поэтому подумай - нет ли у теля лишних перезаписей в элемент massivC(k) - как меняется индекс k у тебя не показано. Далее может можно отсортировать данные и это позволит ускорить обработку? Или может известно статистическое распределение данных, что тоже может дать идеи для оптимизации? В общем первый шаг это оптимальный алгоритм - он не зависит от языка реализации. 2) Наиболее эффективно работать с областями памяти позволяет работать C#. Там можно использовая ключевое слово fixed и указатели. Метод использующий их надо будет пометить как unsafe и указать соотв. параметр компилятору. 3) Часть времени исполнения управляемой программы уходит на ее компиляцию. Можно заранее создать откомпилированный образ программы используя утилиту ngen. Но с такими объемами данных ее влияние не будет заметно. Если шаги 2) и 3) не помогают, то можно переписать код работы с массивами на неуправляемом C++ или ассемблере. Откомпилировать в dll и вызывать из VB.NET или C#. Когда ты спрашивал про "максимальную скорость программы", тебе советовали как раз C++ или ассемблер.
0
|
|
|
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
|
|
| 07.12.2011, 14:32 | |
|
Почитай статью "У границ безопасного кода"
http://kubcat.subscribe.ru/archive/comp.soft.prog.dotnetgrains/200508/25174527.html#3
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 10
|
|
| 07.12.2011, 20:18 | |
|
у класса Array есть статические метод Copy... он и будет в 100 быстрее чем твой код. Быстрее только на асме...
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 10
|
|
| 07.12.2011, 20:24 | |
|
сорри немного не дочитал до конца. но всеравно, быстрее ты не сделаешь и делай на дотнете. Как вариант написать все на управляемом си++ с использованием указателей. Так не будет контроля размерности массива, что само по себе быстрее. Кстати возможность создания "опасного" кода и прямой работы с указателями есть и в C#. Ну а Васик как всегда..
0
|
|
| 07.12.2011, 20:24 | |
|
Помогаю со студенческими работами здесь
5
Максимальная скорость Wi-fi Максимальная угловая скорость Максимальная скорость у 1121A. Максимальная угловая скорость Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|