Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65437
Модуль Forms 65199
Пример работы с... 64415
ТЕХНОЛОГИИ ДОСТ... 61846
Имитационное мо... 57764
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,085
новичок: nikita222dolban
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных - словарь терминов на Delphi + Пояснительная записка
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...
Информационная система - транспортный парк на Turbo Pascal (База данных)...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Производительность в ходе тестирования и программирования
Варианты, продемонстрировавшие худшие показатели производительности, обычно обусловлены неудачным выбором алгоритма и могут быть обнаружены на этапе отладки. Одна из целей тестирования программ на крупных наборах данных заключается в выявлении неэффективных алгоритмов. В качестве примера предположим, что приложение должно суммировать элементы, стоящие в строках матрицы (используя класс Matrix).


Также вам может показаться, что такая тема как
http://slav-group.com/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт slav-group.com
Тема лизинг персонала там представлена весьма широко.

Некто предложил использовать подходящую функцию.
double row_sum(Matrix m, int n); // суммирует элементы
// в m[n]
Потом этот некто стал использовать эту функцию для того, чтобы сгенерировать вектор сумм, где v[n] — сумма элементов в первых n строках.
double row_accum(Matrix m, int n) // сумма элементов
// в m[0:n)
{
double s = 0;
for (int i=0; i }
// вычисляет накопленные суммы по строкам матрицы m:
vector v;
for (int i = 0; i v.push_back(row_accum(m,i+1));
Представьте себе, что этот код является частью модульного теста или выполняется как часть системного теста. В любом случае вы заметите нечто странное, если матрица станет действительно большой: по существу, время, необходимое для выполнения программы, квадратично зависит от размера матрицы m. Почему? Дело в том, что мы просуммировали все элементы в первой строке, затем добавили элементы из второй строки (снова перебрав все элементы из первой строки), потом все элементы из третьей строки (перебрав все элементы из первой и второй строк) и т.д. Если вы считаете этот пример неудачным, посмотрите, что произойдет, если функция row_sum() обратится к базе данных за данными. Чтение данных с диска во много тысяч раз медленнее, чем чтение из оперативной памяти.
Вы можете возразить: “Никто никогда не сможет сделать нечто настолько глупое!” Извините, но мы видели вещи и похуже, и, как правило, плохой (с точки зрения производительности) алгоритм очень нелегко выявить, если он глубоко скрыт в коде приложения. Заметили ли вы проблемы с производительностью, когда в первый раз увидели этот код? Проблему бывает трудно выявить, если не искать ее целенаправленно. Рассмотрим простой реальный пример, найденный на одном сервере.
for (int i=0; i Часто переменная s представляет собой строку размером примерно 20 K.
Не все проблемы, связанные с производительностью программы, объясняются плохим алгоритмом. Фактически (как мы указывали в разделе 26.3.3) большую часть кода, который мы пишем, нельзя квалифицировать как плохой алгоритм.
Такие “неалгоритмические” проблемы обычно связаны с неправильным проектированием. Перечислим некоторые из них.
• Повторяющееся перевычисление информации (как, например, в приведенном выше примере).
• Повторяющаяся проверка одного и того же факта (например, проверка того, что индекс не выходит за пределы допустимого диапазона при каждом его использовании в теле цикла, или повторяющаяся проверка аргумента, который передается от одной функции другой без каких-либо изменений).
• Повторяющиеся обращения к диску (или к сети).
Обратите внимание на слово “повторяющиеся”. Очевидно, что мы имеем в виду “напрасно повторяющееся”, поскольку на производительность оказывают влияние лишь те действия, которые выполняются много раз. Мы являемся горячими сторонниками строгой проверки аргументов функций и переменных циклов, но если мы миллионы раз проверяем одну и ту же переменную, то такие излишние проверки могут нанести ущерб производительности программы.

Если в результате измерений выяснится, что производительность упала, мы должны изыскать возможность удалить повторяющиеся действия. Не делайте этого, пока не убедитесь, что производительность программы действительно стала неприемлемо низкой. Дело в том, что преждевременная оптимизация часто является источником многих ошибок и занимает много времени.
Опубликовал katy April 28 2015 16:27:19 · 0 Комментариев · 1541 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
IconCut [Исходник...
mp3tag
Animation Effect ...
Java Server Pages...
MP3 Архив v.2.0
Assistant
TmxOutlookBarPro
Конвертирование и...
Delphi. Разработк...
ЯЗЫК ПРОГРАММИРОВ...
Изучаем Ассемблер
Strawberry Prolog...
PHP 5 для "чайников"
Exe in exe
SMLPack v1.0
Система баннеро-о...
Правила программи...
Приемы программир...
Архив значков
Введение в станда...

Топ загрузок
Приложение Клие... 100470
Delphi 7 Enterp... 87056
Converter AMR<-... 20078
GPSS World Stud... 12821
Borland C++Buil... 11832
Borland Delphi ... 8603
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4799
FreeSMS v1.3.1 3542
Случайные статьи
Планируется замени...
Как быть, если мас...
Программирование: ...
Установка/Апгрейд ...
Драйвер seg_map
Разборка приставки...
Взаимосвязь станда...
Разработка общего ...
Проектирование алг...
Содержание цифрово...
Свободная память в...
Управление нормиро...
МОДЕЛЬ С АКТИВНОЙ ...
Удаление ранее вве...
Построение двусвяз...
Приём создания qua...
OpenGL. МИНИМАЛЬНА...
Содержание
Генерация контента...
Вычислить среднее ...
Учетные записиполь...
• Инициализация во...
10.8. Пример эффек...
Сохранение «образа...
Содержание
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?